diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-01-30 21:54:38 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-01-30 21:54:38 -0700 |
commit | 8467bdaa181257d031a258a05012dc85adbcb233 (patch) | |
tree | bc9bf437a34905f0b7249352043aff9e9d80ebe8 /encode.go | |
parent | 0b57145421e7e4f165f64e73ee7c5d8102945569 (diff) | |
parent | 2e48a42fb9b9e946958810cfbb90ae85bee997e4 (diff) |
Merge branch 'lukeshu/quality2'
Diffstat (limited to 'encode.go')
-rw-r--r-- | encode.go | 41 |
1 files changed, 15 insertions, 26 deletions
@@ -17,7 +17,6 @@ import ( "sort" "strconv" "strings" - "unicode/utf8" "unsafe" ) @@ -147,7 +146,11 @@ func encode(w io.Writer, val reflect.Value, escaper BackslashEscaper, quote bool }}) } if err := validator.Close(); err != nil && !errors.Is(err, iofs.ErrClosed) { - panic(encodeError{err}) + panic(encodeError{&EncodeMethodError{ + Type: val.Type(), + SourceFunc: "EncodeJSON", + Err: err, + }}) } case val.Kind() != reflect.Pointer && val.CanAddr() && reflect.PointerTo(val.Type()).Implements(jsonMarshalerType): @@ -174,10 +177,18 @@ func encode(w io.Writer, val reflect.Value, escaper BackslashEscaper, quote bool // Use a sub-ReEncoder to check that it's a full element. validator := &ReEncoder{Out: w, BackslashEscape: escaper} if _, err := validator.Write(dat); err != nil { - panic(encodeError{err}) + panic(encodeError{&EncodeMethodError{ + Type: val.Type(), + SourceFunc: "MarshalJSON", + Err: err, + }}) } if err := validator.Close(); err != nil { - panic(encodeError{err}) + panic(encodeError{&EncodeMethodError{ + Type: val.Type(), + SourceFunc: "MarshalJSON", + Err: err, + }}) } case val.Kind() != reflect.Pointer && val.CanAddr() && reflect.PointerTo(val.Type()).Implements(textMarshalerType): @@ -426,28 +437,6 @@ func encode(w io.Writer, val reflect.Value, escaper BackslashEscaper, quote bool } } -func encodeStringFromString(w io.Writer, escaper BackslashEscaper, str string) { - encodeWriteByte(w, '"') - for _, c := range str { - if _, err := writeStringChar(w, c, BackslashEscapeNone, escaper); err != nil { - panic(encodeError{err}) - } - } - encodeWriteByte(w, '"') -} - -func encodeStringFromBytes(w io.Writer, escaper BackslashEscaper, str []byte) { - encodeWriteByte(w, '"') - for i := 0; i < len(str); { - c, size := utf8.DecodeRune(str[i:]) - if _, err := writeStringChar(w, c, BackslashEscapeNone, escaper); err != nil { - panic(encodeError{err}) - } - i += size - } - encodeWriteByte(w, '"') -} - func encodeArray(w io.Writer, val reflect.Value, escaper BackslashEscaper, cycleDepth uint, cycleSeen map[any]struct{}) { encodeWriteByte(w, '[') n := val.Len() |