From 234e0836f1040f7724251b4120a2351bcbf64131 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 13 Aug 2022 15:11:17 -0600 Subject: set up as a separate repo --- adapter_test.go | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 adapter_test.go (limited to 'adapter_test.go') diff --git a/adapter_test.go b/adapter_test.go new file mode 100644 index 0000000..b1aec3e --- /dev/null +++ b/adapter_test.go @@ -0,0 +1,120 @@ +// Copyright (C) 2022 Luke Shumaker +// +// SPDX-License-Identifier: GPL-2.0-or-later + +package lowmemjson + +import ( + "bufio" + "bytes" + "encoding/json" + "io" +) + +func MarshalIndent(v any, prefix, indent string) ([]byte, error) { + var buf bytes.Buffer + formatter := &ReEncoder{ + Out: &buf, + Indent: indent, + prefix: prefix, + } + err := Encode(formatter, v) + return buf.Bytes(), err +} + +func Marshal(v any) ([]byte, error) { + var buf bytes.Buffer + formatter := &ReEncoder{ + Out: &buf, + Compact: true, + } + err := Encode(formatter, v) + return buf.Bytes(), err +} + +func HTMLEscape(dst *bytes.Buffer, src []byte) { + formatter := &ReEncoder{ + Out: dst, + } + _, _ = formatter.Write(src) +} + +func Compact(dst *bytes.Buffer, src []byte) error { + formatter := &ReEncoder{ + Out: dst, + Compact: true, + } + _, err := formatter.Write(src) + return err +} + +func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error { + formatter := &ReEncoder{ + Out: dst, + Indent: indent, + prefix: prefix, + } + _, err := formatter.Write(src) + return err +} + +func Valid(data []byte) bool { + formatter := &ReEncoder{ + Out: io.Discard, + Compact: true, + } + _, err := formatter.Write(data) + return err == nil +} + +func Unmarshal(data []byte, ptr any) error { + return Decode(bytes.NewReader(data), ptr) +} + +func init() { + forceBufio = true +} + +func (dec *Decoder) Buffered() io.Reader { + buf := dec.r.(*bufio.Reader) + dat, _ := buf.Peek(buf.Buffered()) + return bytes.NewReader(dat) +} + +//func (dec *Decoder) Token() (Token, error) + +///////////////////////////////////////////////////////////////////// + +type ( + Number = json.Number + Marshaler = json.Marshaler + RawMessage = json.RawMessage + + UnsupportedValueError = json.UnsupportedValueError + MarshalerError = json.MarshalerError + UnmarshalTypeError = json.UnmarshalTypeError +) + +const ( + startDetectingCyclesAfter = 1000 +) + +func isSpace(c byte) bool { + switch c { + case 0x0020, 0x000A, 0x000D, 0x0009: + return true + default: + return false + } +} + +type encodeState struct { + bytes.Buffer +} + +func (es *encodeState) string(str string, _ bool) { + encodeString(&es.Buffer, str) +} +func (es *encodeState) stringBytes(str []byte, _ bool) { + encodeString(&es.Buffer, str) +} -- cgit v1.2.3-2-g168b