summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-10 18:33:45 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-10 21:49:02 -0700
commit3aa6f66af3ceff7e0d9044678dbf1edeec1bc09d (patch)
treea3942a0f40c4380a8f08f9511d540d6edf8f1ec2
parentd287a39cb902713ab0e5dff2f300c4e161ceb3d7 (diff)
decode: Have .decodeBool() return a *DecodeError
-rw-r--r--decode.go17
1 files changed, 10 insertions, 7 deletions
diff --git a/decode.go b/decode.go
index a79f7cd..237c739 100644
--- a/decode.go
+++ b/decode.go
@@ -440,7 +440,11 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) (_err *DecodeError) {
dec.decodeNull()
return
}
- val.SetBool(dec.decodeBool(typ))
+ b, err := dec.decodeBool(typ)
+ if err != nil {
+ return err
+ }
+ val.SetBool(b)
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
if nullOK && dec.peekRuneType() == jsonparse.RuneTypeNullN {
dec.decodeNull()
@@ -882,7 +886,7 @@ func (dec *Decoder) decodeAny() (any, *DecodeError) {
}
return f64, nil
case 't', 'f':
- return dec.decodeBool(nil), nil
+ return dec.decodeBool(nil)
case 'n':
dec.decodeNull()
return nil, nil
@@ -1146,23 +1150,22 @@ func (dec *Decoder) decodeString(gTyp reflect.Type, out fastio.RuneWriter) {
}
}
-func (dec *Decoder) decodeBool(gTyp reflect.Type) bool {
+func (dec *Decoder) decodeBool(gTyp reflect.Type) (bool, *DecodeError) {
c, t := dec.readRune()
switch c {
case 't':
dec.expectRune('r', jsonparse.RuneTypeTrueR)
dec.expectRune('u', jsonparse.RuneTypeTrueU)
dec.expectRune('e', jsonparse.RuneTypeTrueE)
- return true
+ return true, nil
case 'f':
dec.expectRune('a', jsonparse.RuneTypeFalseA)
dec.expectRune('l', jsonparse.RuneTypeFalseL)
dec.expectRune('s', jsonparse.RuneTypeFalseS)
dec.expectRune('e', jsonparse.RuneTypeFalseE)
- return false
+ return false, nil
default:
- err := dec.newTypeError(t.JSONType(), gTyp, nil)
- panic(decodeError(*err))
+ return false, dec.newTypeError(t.JSONType(), gTyp, nil)
}
}