diff options
author | Luke Shumaker <lukeshu@datawire.io> | 2022-08-21 12:06:50 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@datawire.io> | 2022-08-21 12:06:50 -0600 |
commit | 6ba16f05e9c36d4341da4590600eb2c4221ac642 (patch) | |
tree | adccf15073073237eafc1926110fe3da46ea2aee /decode.go | |
parent | fb063e2955debb9d02debf3f59de291d99017058 (diff) |
decode: Lean in to io.RuneScanner
So that it's easier to compose your own .DecodeJSON methods, since
.DecodeJSON takes an io.RuneScanner.
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 |