summaryrefslogtreecommitdiff
path: root/compat/json/compat.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@datawire.io>2022-08-16 00:15:57 -0600
committerLuke Shumaker <lukeshu@datawire.io>2022-08-16 02:08:39 -0600
commit8c0513a04ff3870f57bde230507aaa8c6b7e6e86 (patch)
tree4e9c8082bb9168c923eee2c6bd17f01e44206f0a /compat/json/compat.go
parent83ec1924ae051b60f911aa8b53b741c5371faaf8 (diff)
Get borrowed_decode_test.go passing
Diffstat (limited to 'compat/json/compat.go')
-rw-r--r--compat/json/compat.go30
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