diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-10 18:33:45 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-10 21:49:02 -0700 |
commit | 3aa6f66af3ceff7e0d9044678dbf1edeec1bc09d (patch) | |
tree | a3942a0f40c4380a8f08f9511d540d6edf8f1ec2 /decode.go | |
parent | d287a39cb902713ab0e5dff2f300c4e161ceb3d7 (diff) |
decode: Have .decodeBool() return a *DecodeError
Diffstat (limited to 'decode.go')
-rw-r--r-- | decode.go | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -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) } } |