summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-23 19:13:39 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-23 19:13:39 -0700
commitf369aff688697a881833d86c13b18156e8376f08 (patch)
tree863d0ddf9ef4ef9f1131a6da8d5a1584c978691b
parentb00178cc98f3e215d841a0f42db21461d8363012 (diff)
decode: Inline scanNumber
-rw-r--r--decode.go32
1 files changed, 18 insertions, 14 deletions
diff --git a/decode.go b/decode.go
index 8c26a80..126b904 100644
--- a/decode.go
+++ b/decode.go
@@ -462,8 +462,13 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) *DecodeError {
if ok, err := dec.maybeDecodeNull(nullOK); ok {
return err
}
+ if t, err := dec.peekRuneType(); err != nil {
+ return err
+ } else if !t.IsNumber() {
+ return dec.newTypeError(t.JSONType(), typ, nil)
+ }
var buf strings.Builder
- if err := dec.scanNumber(typ, &buf); err != nil {
+ if err := dec.scan(&buf); err != nil {
return err
}
n, err := strconv.ParseInt(buf.String(), 10, kind2bits[kind])
@@ -475,8 +480,13 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) *DecodeError {
if ok, err := dec.maybeDecodeNull(nullOK); ok {
return err
}
+ if t, err := dec.peekRuneType(); err != nil {
+ return err
+ } else if !t.IsNumber() {
+ return dec.newTypeError(t.JSONType(), typ, nil)
+ }
var buf strings.Builder
- if err := dec.scanNumber(typ, &buf); err != nil {
+ if err := dec.scan(&buf); err != nil {
return err
}
n, err := strconv.ParseUint(buf.String(), 10, kind2bits[kind])
@@ -488,8 +498,13 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) *DecodeError {
if ok, err := dec.maybeDecodeNull(nullOK); ok {
return err
}
+ if t, err := dec.peekRuneType(); err != nil {
+ return err
+ } else if !t.IsNumber() {
+ return dec.newTypeError(t.JSONType(), typ, nil)
+ }
var buf strings.Builder
- if err := dec.scanNumber(typ, &buf); err != nil {
+ if err := dec.scan(&buf); err != nil {
return err
}
n, err := strconv.ParseFloat(buf.String(), kind2bits[kind])
@@ -881,17 +896,6 @@ func (dec *Decoder) scan(out fastio.RuneWriter) *DecodeError {
return nil
}
-func (dec *Decoder) scanNumber(gTyp reflect.Type, out fastio.RuneWriter) *DecodeError {
- t, err := dec.peekRuneType()
- if err != nil {
- return err
- }
- if !t.IsNumber() {
- return dec.newTypeError(t.JSONType(), gTyp, nil)
- }
- return dec.scan(out)
-}
-
func (dec *Decoder) decodeAny() (any, *DecodeError) {
t, err := dec.peekRuneType()
if err != nil {