summaryrefslogtreecommitdiff
path: root/decode.go
diff options
context:
space:
mode:
Diffstat (limited to 'decode.go')
-rw-r--r--decode.go17
1 files changed, 4 insertions, 13 deletions
diff --git a/decode.go b/decode.go
index 487bce4..645f8de 100644
--- a/decode.go
+++ b/decode.go
@@ -14,7 +14,6 @@ package lowmemjson
import (
"bytes"
"encoding"
- "encoding/json"
"fmt"
"io"
"reflect"
@@ -232,7 +231,7 @@ func (dec *Decoder) DecodeThenEOF(ptr any) (err error) {
// json.Unmarshaler interface it also checks for the Decodable
// interface.
//
-// [documentation for encoding/json.Unmarshal]: https://pkg.go.dev/encoding/json@go1.18#Unmarshal
+// [documentation for encoding/json.Unmarshal]: https://pkg.go.dev/encoding/json@go1.20#Unmarshal
func (dec *Decoder) Decode(ptr any) (err error) {
ptrVal := reflect.ValueOf(ptr)
if ptrVal.Kind() != reflect.Pointer || ptrVal.IsNil() || !ptrVal.Elem().CanSet() {
@@ -357,14 +356,6 @@ func (dec *Decoder) limitingScanner() io.RuneScanner {
// decoder main ////////////////////////////////////////////////////////////////////////////////////
-var (
- rawMessagePtrType = reflect.TypeOf((*json.RawMessage)(nil))
- decodableType = reflect.TypeOf((*Decodable)(nil)).Elem()
- jsonUnmarshalerType = reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()
- textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()
- float64Type = reflect.TypeOf(float64(0))
-)
-
var kind2bits = map[reflect.Kind]int{
reflect.Int: int(32 << (^uint(0) >> 63)),
reflect.Int8: 8,
@@ -393,7 +384,7 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) {
t := dec.peekRuneType()
var buf bytes.Buffer
dec.scan(&buf)
- if err := val.Addr().Interface().(*json.RawMessage).UnmarshalJSON(buf.Bytes()); err != nil {
+ if err := val.Addr().Interface().(*RawMessage).UnmarshalJSON(buf.Bytes()); err != nil {
dec.panicType(t.JSONType(), reflect.PointerTo(typ), err)
}
case val.CanAddr() && reflect.PointerTo(typ).Implements(decodableType):
@@ -410,7 +401,7 @@ func (dec *Decoder) decode(val reflect.Value, nullOK bool) {
t := dec.peekRuneType()
var buf bytes.Buffer
dec.scan(&buf)
- obj := val.Addr().Interface().(json.Unmarshaler)
+ obj := val.Addr().Interface().(jsonUnmarshaler)
if err := obj.UnmarshalJSON(buf.Bytes()); err != nil {
dec.panicType(t.JSONType(), reflect.PointerTo(typ), err)
}
@@ -826,7 +817,7 @@ func (dec *Decoder) decodeAny() any {
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
var buf strings.Builder
dec.scan(&buf)
- num := json.Number(buf.String())
+ num := Number(buf.String())
if dec.useNumber {
return num
}