// Copyright (C) 2022-2023 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later package json import ( "bytes" "io" "git.lukeshu.com/go/lowmemjson" "git.lukeshu.com/go/lowmemjson/internal/jsonparse" "git.lukeshu.com/go/lowmemjson/internal/jsonstruct" "git.lukeshu.com/go/lowmemjson/internal/jsontest" ) var ( parseTag = jsonstruct.ParseTag clearCache = jsonstruct.ClearCache cachedTypeFields = jsonstruct.IndexStruct ) type scanner = lowmemjson.ReEncoderConfig func checkValid(in []byte, scan *lowmemjson.ReEncoderConfig) error { return reencode(io.Discard, in, *scan) } func isValidNumber(s string) bool { var parser jsonparse.Parser for _, r := range s { if t, _ := parser.HandleRune(r); !t.IsNumber() { return false } } if t, _ := parser.HandleEOF(); t == jsonparse.RuneTypeError { return false } return true } 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) { jsontest.EncodeStringFromString(&es.Buffer, str) } func (es *encodeState) stringBytes(str []byte, _ bool) { jsontest.EncodeStringFromBytes(&es.Buffer, str) }