diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-18 21:57:39 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-18 22:45:39 -0700 |
commit | edfc7aa91b542978ce28eb109b99a257650b62b4 (patch) | |
tree | 3bc300355b7843a2c2ba3a0ec5db4346cdc87965 /decode.go | |
parent | cf75ff06887d7bbb5bbbd682587b9d3f5e474670 (diff) |
decode_scan, jsonparse: Rework the behavior to make a bit more sense
- decode_scan: Don't have .Reset() re-play an erroring rune
- decode_Scan: Have RuneTypeEOF always be zero-width
- jsonparse: Don't replace syntax errors with RuneTypeEOF if there's no barrier
Diffstat (limited to 'decode.go')
-rw-r--r-- | decode.go | 18 |
1 files changed, 8 insertions, 10 deletions
@@ -207,19 +207,17 @@ func (dec *Decoder) DecodeThenEOF(ptr any) (err error) { if err := dec.Decode(ptr); err != nil { return err } - c, s, t, _ := dec.io.ReadRuneType() - if t != jsonparse.RuneTypeEOF { - panic(fmt.Errorf("should not happen: .ReadRuneType returned non-EOF after decode without .Reset being called: %v", t)) - } - if s > 0 { + _, _, t, err := dec.io.ReadRuneType() + switch t { + case jsonparse.RuneTypeError: return &DecodeError{ - Err: &DecodeSyntaxError{ - Err: fmt.Errorf("invalid character %q after top-level value", c), - Offset: dec.InputOffset(), - }, + Err: err, } + case jsonparse.RuneTypeEOF: + return nil + default: + panic(fmt.Errorf("should not happen: .ReadRuneType returned non-error non-EOF after decode without .Reset being called: '%v'", t)) } - return nil } // Decode reads the next JSON element from the Decoder's input stream |