diff options
author | Luke Shumaker <lukeshu@datawire.io> | 2022-08-17 14:12:53 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@datawire.io> | 2022-08-17 14:14:53 -0600 |
commit | 25f5b3a2aabe11a7f8dad3d001ac30b65c1e6c06 (patch) | |
tree | 91ea451a750e8cd0d3db28257c477c17f7939512 | |
parent | 28dc29b7b05dc9c7ea1cec577963757f75faa601 (diff) |
DecodeThenEOF: Simplify
-rw-r--r-- | decode.go | 38 |
1 files changed, 16 insertions, 22 deletions
@@ -122,33 +122,27 @@ func Decode(r interface { } // DecodeThenEOF is like decode, but emits an error if there is extra data after the JSON. -func DecodeThenEOF(r interface { - io.Reader - io.RuneScanner -}, ptr any) error { - dec := NewDecoder(r) +func DecodeThenEOF(r io.Reader, ptr any) error { + return NewDecoder(r).DecodeThenEOF(ptr) +} + +func (dec *Decoder) DecodeThenEOF(ptr any) (err error) { if err := dec.Decode(ptr); err != nil { return err } - for { - c, s, t, _ := dec.io.ReadRuneType() - switch t { - case RuneTypeSpace: - // do nothing - case RuneTypeEOF: - if s > 0 { - return &DecodeError{ - Err: &DecodeSyntaxError{ - Err: fmt.Errorf("invalid character %q after top-level value", c), - Offset: dec.InputOffset(), - }, - } - } - return nil - default: - panic("should not happen") + c, s, t, _ := dec.io.ReadRuneType() + if t != RuneTypeEOF { + panic("should not happen") + } + if s > 0 { + return &DecodeError{ + Err: &DecodeSyntaxError{ + Err: fmt.Errorf("invalid character %q after top-level value", c), + Offset: dec.InputOffset(), + }, } } + return nil } func (dec *Decoder) Decode(ptr any) (err error) { |