From 3aa6f66af3ceff7e0d9044678dbf1edeec1bc09d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 10 Feb 2023 18:33:45 -0700 Subject: decode: Have .decodeBool() return a *DecodeError --- decode.go | 17 ++++++++++------- 1 file 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) } } -- cgit v1.2.3-2-g168b