diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-01-28 23:26:26 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-01-30 13:49:17 -0700 |
commit | e87c9b4d8b629f5df19e9dd182162889d279b4f2 (patch) | |
tree | 78c368370dbe7f35246aa353d934c906b36be0c1 /encode.go | |
parent | ff6dc0bc519886905e758a84e572f5e34d6c03d1 (diff) |
encode: Fix errors for marshalers/encodables with bad output
Diffstat (limited to 'encode.go')
-rw-r--r-- | encode.go | 18 |
1 files changed, 15 insertions, 3 deletions
@@ -146,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): @@ -173,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): |