diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-10 21:48:38 -0700 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-02-10 21:48:38 -0700 |
commit | 95180a90db47990d32104ff7ab103e4862fd8426 (patch) | |
tree | 7733466fac856d93bfb6d6100fd703830a915567 /external.go | |
parent | e9f3bdc767027d134a072e09f16bcccac75fa59f (diff) | |
parent | ddffd7b78d81f1b47b5829eb9ff0aa1887cc3b17 (diff) |
Merge branch 'lukeshu/misc'
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)) +) |