summaryrefslogtreecommitdiff
path: root/external.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-02-10 15:27:46 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-02-10 21:48:22 -0700
commit04daa09e1911d7bdabe87e452200b2de2c5ca7c9 (patch)
tree4e125b226bec6c9ec33335c4d9ff3bdfd874242c /external.go
parent1f0abce0bf4061261572f6ed2f815f71647cc7e5 (diff)
Be more careful about importing encoding/json
Diffstat (limited to 'external.go')
-rw-r--r--external.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/external.go b/external.go
new file mode 100644
index 0000000..c8a1f68
--- /dev/null
+++ b/external.go
@@ -0,0 +1,48 @@
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
+//
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package lowmemjson
+
+import (
+ "encoding"
+ "encoding/json"
+ "reflect"
+)
+
+// A Number represents a JSON number value. It is represented as a
+// string containing the raw JSON text; it is useful for preserving
+// number values with perfect fidelity, but isn't so useful for use as
+// a number value in a Go program.
+type Number = json.Number
+
+// A RawMessage is a raw encoded JSON value. This saves time when
+// encoding or decoding, but does mean that the full text must be
+// buffered when decoding.
+type RawMessage = json.RawMessage
+
+type (
+ jsonMarshaler = json.Marshaler
+ jsonUnmarshaler = json.Unmarshaler
+)
+
+var (
+ // common types.
+ numberType = reflect.TypeOf(Number(""))
+ byteType = reflect.TypeOf(byte(0))
+ byteSliceType = reflect.TypeOf(([]byte)(nil))
+
+ // encodable/marshaler types.
+ encodableType = reflect.TypeOf((*Encodable)(nil)).Elem()
+ jsonMarshalerType = reflect.TypeOf((*json.Marshaler)(nil)).Elem()
+ textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
+
+ // decodable/unmarshaler types.
+ decodableType = reflect.TypeOf((*Decodable)(nil)).Elem()
+ jsonUnmarshalerType = reflect.TypeOf((*json.Unmarshaler)(nil)).Elem()
+ textUnmarshalerType = reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem()
+
+ // other types used by Decoder.
+ rawMessagePtrType = reflect.TypeOf((*json.RawMessage)(nil))
+ float64Type = reflect.TypeOf(float64(0))
+)