diff options
Diffstat (limited to 'compat/json/compat.go')
-rw-r--r-- | compat/json/compat.go | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/compat/json/compat.go b/compat/json/compat.go index 7145a86..570afc9 100644 --- a/compat/json/compat.go +++ b/compat/json/compat.go @@ -75,31 +75,32 @@ func HTMLEscape(dst *bytes.Buffer, src []byte) { _, _ = formatter.Write(src) } +func reencode(src []byte, formatter *lowmemjson.ReEncoder) error { + _, err := formatter.Write(src) + if se, ok := err.(*lowmemjson.ReEncodeSyntaxError); ok { + err = &SyntaxError{ + msg: se.Err.Error(), + Offset: se.Offset + 1, + } + } + return err +} + func Compact(dst *bytes.Buffer, src []byte) error { - formatter := &lowmemjson.ReEncoder{ + return reencode(src, &lowmemjson.ReEncoder{ Out: dst, Compact: true, BackslashEscape: lowmemjson.EscapePreserve, - } - _, err := formatter.Write(src) - return err + }) } func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error { - formatter := &lowmemjson.ReEncoder{ + return reencode(src, &lowmemjson.ReEncoder{ Out: dst, Indent: indent, Prefix: prefix, BackslashEscape: lowmemjson.EscapePreserve, - } - _, err := formatter.Write(src) - if se, ok := err.(*lowmemjson.ReEncodeSyntaxError); ok { - err = &SyntaxError{ - msg: se.Err.Error(), - Offset: se.Offset + 1, - } - } - return err + }) } func Valid(data []byte) bool { @@ -153,6 +154,7 @@ func (dec *Decoder) Decode(ptr any) error { } } else if _, isArgErr := terr.Err.(*lowmemjson.DecodeArgumentError); terr.Err != nil && !isArgErr && + !errors.Is(terr.Err, lowmemjson.ErrDecodeNonEmptyInterface) && !errors.Is(terr.Err, strconv.ErrSyntax) && !errors.Is(terr.Err, strconv.ErrRange) { err = terr.Err |