diff options
Diffstat (limited to 'decode.go')
-rw-r--r-- | decode.go | 19 |
1 files changed, 6 insertions, 13 deletions
@@ -5,7 +5,6 @@ package lowmemjson import ( - "bufio" "bytes" "encoding" "encoding/json" @@ -47,15 +46,11 @@ type Decoder struct { const maxNestingDepth = 10000 -func NewDecoder(r io.Reader) *Decoder { - rr, ok := r.(io.RuneReader) - if !ok { - rr = bufio.NewReader(r) - } +func NewDecoder(r io.RuneScanner) *Decoder { return &Decoder{ io: &noWSRuneTypeScanner{ inner: &runeTypeScannerImpl{ - inner: rr, + inner: r, parser: Parser{ MaxDepth: maxNestingDepth, }, @@ -114,18 +109,16 @@ func (dec *Decoder) stackName() string { return strings.Join(fields, ".") } -func Decode(r interface { - io.Reader - io.RuneScanner // enforce that the reader have .UnreadRune() so that we don't risk reading too far when decoding a number -}, ptr any) error { +func Decode(r io.RuneScanner, ptr any) error { return NewDecoder(r).Decode(ptr) } -// DecodeThenEOF is like decode, but emits an error if there is extra data after the JSON. -func DecodeThenEOF(r io.Reader, ptr any) error { +func DecodeThenEOF(r io.RuneScanner, ptr any) error { return NewDecoder(r).DecodeThenEOF(ptr) } +// DecodeThenEOF is like decode, but emits an error if there is extra +// data after the JSON. func (dec *Decoder) DecodeThenEOF(ptr any) (err error) { if err := dec.Decode(ptr); err != nil { return err |