// Copyright (C) 2022-2023 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later package json import ( "bytes" "encoding/json" "io" "reflect" _ "unsafe" "git.lukeshu.com/go/lowmemjson" "git.lukeshu.com/go/lowmemjson/internal/jsonparse" "git.lukeshu.com/go/lowmemjson/internal/jsonstring" "git.lukeshu.com/go/lowmemjson/internal/jsonstruct" ) 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 ) type encodeState struct { bytes.Buffer } func (es *encodeState) string(str string, _ bool) { if err := jsonstring.EncodeStringFromString(&es.Buffer, lowmemjson.EscapeDefault, 0, reflect.Value{}, str); err != nil { panic(err) } } func (es *encodeState) stringBytes(str []byte, _ bool) { if err := jsonstring.EncodeStringFromBytes(&es.Buffer, lowmemjson.EscapeDefault, 0, reflect.Value{}, str); err != nil { panic(err) } } type ( Token = json.Token Delim = json.Delim ) func (dec *Decoder) Token() (Token, error) { panic("not implemented") }