summaryrefslogtreecommitdiff
path: root/encode.go
diff options
context:
space:
mode:
Diffstat (limited to 'encode.go')
-rw-r--r--encode.go41
1 files changed, 15 insertions, 26 deletions
diff --git a/encode.go b/encode.go
index 41032e5..00848ed 100644
--- a/encode.go
+++ b/encode.go
@@ -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()