From 83ec1924ae051b60f911aa8b53b741c5371faaf8 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 15 Aug 2022 22:29:52 -0600 Subject: Get borrowed_encode_test.go passing [ci-skip] --- compat/json/compat.go | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) (limited to 'compat/json/compat.go') diff --git a/compat/json/compat.go b/compat/json/compat.go index 04dfb24..7145a86 100644 --- a/compat/json/compat.go +++ b/compat/json/compat.go @@ -29,35 +29,45 @@ type ( InvalidUnmarshalError = json.InvalidUnmarshalError // lowmemjson.DecodeArgumentError // marshal errors - InvalidUTF8Error = json.InvalidUTF8Error - MarshalerError = lowmemjson.EncodeMethodError // expose a field + InvalidUTF8Error = json.InvalidUTF8Error + //MarshalerError = lowmemjson.EncodeMethodError // expose a field UnsupportedTypeError = json.UnsupportedTypeError UnsupportedValueError = json.UnsupportedValueError ) -///////////////////////////////////////////////////////////////////// +// Encode wrappers /////////////////////////////////////////////////// -func MarshalIndent(v any, prefix, indent string) ([]byte, error) { +func marshal(v any, formatter *lowmemjson.ReEncoder) ([]byte, error) { var buf bytes.Buffer - formatter := &lowmemjson.ReEncoder{ - Out: &buf, + formatter.Out = &buf + if err := lowmemjson.Encode(formatter, v); err != nil { + if me, ok := err.(*lowmemjson.EncodeMethodError); ok { + err = &MarshalerError{ + Type: me.Type, + Err: me.Err, + sourceFunc: me.SourceFunc, + } + } + return nil, err + } + return buf.Bytes(), nil +} + +func MarshalIndent(v any, prefix, indent string) ([]byte, error) { + return marshal(v, &lowmemjson.ReEncoder{ Indent: indent, Prefix: prefix, - } - err := lowmemjson.Encode(formatter, v) - return buf.Bytes(), err + }) } func Marshal(v any) ([]byte, error) { - var buf bytes.Buffer - formatter := &lowmemjson.ReEncoder{ - Out: &buf, + return marshal(v, &lowmemjson.ReEncoder{ Compact: true, - } - err := lowmemjson.Encode(formatter, v) - return buf.Bytes(), err + }) } +// ReEncode wrappers ///////////////////////////////////////////////// + func HTMLEscape(dst *bytes.Buffer, src []byte) { formatter := &lowmemjson.ReEncoder{ Out: dst, @@ -101,12 +111,12 @@ func Valid(data []byte) bool { return err == nil } +// Decode wrappers /////////////////////////////////////////////////// + func Unmarshal(data []byte, ptr any) error { return NewDecoder(bytes.NewReader(data)).Decode(ptr) } -///////////////////////////////////////////////////////////////////// - type Decoder struct { *lowmemjson.Decoder buf *bufio.Reader -- cgit v1.2.3-2-g168b