summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-10 18:46:00 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-10 21:49:02 -0700
commit2b6a4ece366b83ddd53d91b41a62b9c5d548958d (patch)
treefd95aa777f1108fe1ee8090641125e4abe1b97e5
parentabd63cfa18dbb5d9ef37f07442e70d2d9d9e6b49 (diff)
decode: Have .expectRuneType() return a *DecodeError
-rw-r--r--decode.go18
1 files changed, 12 insertions, 6 deletions
diff --git a/decode.go b/decode.go
index 77652af..60667c0 100644
--- a/decode.go
+++ b/decode.go
@@ -302,12 +302,12 @@ func (dec *Decoder) expectRune(ec rune, et jsonparse.RuneType) {
}
}
-func (dec *Decoder) expectRuneType(ec rune, et jsonparse.RuneType, gt reflect.Type) {
+func (dec *Decoder) expectRuneType(ec rune, et jsonparse.RuneType, gt reflect.Type) *DecodeError {
ac, at := dec.readRune()
if ac != ec || at != et {
- err := dec.newTypeError(at.JSONType(), gt, nil)
- panic(decodeError(*err))
+ return dec.newTypeError(at.JSONType(), gt, nil)
}
+ return nil
}
type decRuneScanner struct {
@@ -990,7 +990,9 @@ func DecodeObject(r io.RuneScanner, decodeKey, decodeVal func(io.RuneScanner) er
}
func (dec *Decoder) decodeObject(gTyp reflect.Type, decodeKey, decodeVal func() *DecodeError) *DecodeError {
- dec.expectRuneType('{', jsonparse.RuneTypeObjectBeg, gTyp)
+ if err := dec.expectRuneType('{', jsonparse.RuneTypeObjectBeg, gTyp); err != nil {
+ return err
+ }
_, t := dec.readRune()
switch t {
case jsonparse.RuneTypeObjectEnd:
@@ -1069,7 +1071,9 @@ func DecodeArray(r io.RuneScanner, decodeMember func(r io.RuneScanner) error) (e
}
func (dec *Decoder) decodeArray(gTyp reflect.Type, decodeMember func() *DecodeError) *DecodeError {
- dec.expectRuneType('[', jsonparse.RuneTypeArrayBeg, gTyp)
+ if err := dec.expectRuneType('[', jsonparse.RuneTypeArrayBeg, gTyp); err != nil {
+ return err
+ }
_, t := dec.readRune()
switch t {
case jsonparse.RuneTypeArrayEnd:
@@ -1093,7 +1097,9 @@ func (dec *Decoder) decodeArray(gTyp reflect.Type, decodeMember func() *DecodeEr
}
func (dec *Decoder) decodeString(gTyp reflect.Type, out fastio.RuneWriter) *DecodeError {
- dec.expectRuneType('"', jsonparse.RuneTypeStringBeg, gTyp)
+ if err := dec.expectRuneType('"', jsonparse.RuneTypeStringBeg, gTyp); err != nil {
+ return err
+ }
var uhex [4]byte
for {
c, t := dec.readRune()