diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-10 15:27:46 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-10 21:48:22 -0700 |
commit | 04daa09e1911d7bdabe87e452200b2de2c5ca7c9 (patch) | |
tree | 4e125b226bec6c9ec33335c4d9ff3bdfd874242c /external.go | |
parent | 1f0abce0bf4061261572f6ed2f815f71647cc7e5 (diff) |
Be more careful about importing encoding/json
Diffstat (limited to 'external.go')
-rw-r--r-- | external.go | 48 |
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)) +) |