summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/api.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bytedance/sonic/api.go')
-rw-r--r--vendor/github.com/bytedance/sonic/api.go247
1 files changed, 0 insertions, 247 deletions
diff --git a/vendor/github.com/bytedance/sonic/api.go b/vendor/github.com/bytedance/sonic/api.go
deleted file mode 100644
index 406715eca..000000000
--- a/vendor/github.com/bytedance/sonic/api.go
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright 2021 ByteDance Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package sonic
-
-import (
- `io`
-
- `github.com/bytedance/sonic/ast`
- `github.com/bytedance/sonic/internal/rt`
-)
-
-const (
- // UseStdJSON indicates you are using fallback implementation (encoding/json)
- UseStdJSON = iota
- // UseSonicJSON indicates you are using real sonic implementation
- UseSonicJSON
-)
-
-// APIKind is the kind of API, 0 is std json, 1 is sonic.
-const APIKind = apiKind
-
-// Config is a combination of sonic/encoder.Options and sonic/decoder.Options
-type Config struct {
- // EscapeHTML indicates encoder to escape all HTML characters
- // after serializing into JSON (see https://pkg.go.dev/encoding/json#HTMLEscape).
- // WARNING: This hurts performance A LOT, USE WITH CARE.
- EscapeHTML bool
-
- // SortMapKeys indicates encoder that the keys of a map needs to be sorted
- // before serializing into JSON.
- // WARNING: This hurts performance A LOT, USE WITH CARE.
- SortMapKeys bool
-
- // CompactMarshaler indicates encoder that the output JSON from json.Marshaler
- // is always compact and needs no validation
- CompactMarshaler bool
-
- // NoQuoteTextMarshaler indicates encoder that the output text from encoding.TextMarshaler
- // is always escaped string and needs no quoting
- NoQuoteTextMarshaler bool
-
- // NoNullSliceOrMap indicates encoder that all empty Array or Object are encoded as '[]' or '{}',
- // instead of 'null'
- NoNullSliceOrMap bool
-
- // UseInt64 indicates decoder to unmarshal an integer into an interface{} as an
- // int64 instead of as a float64.
- UseInt64 bool
-
- // UseNumber indicates decoder to unmarshal a number into an interface{} as a
- // json.Number instead of as a float64.
- UseNumber bool
-
- // UseUnicodeErrors indicates decoder to return an error when encounter invalid
- // UTF-8 escape sequences.
- UseUnicodeErrors bool
-
- // DisallowUnknownFields indicates decoder to return an error when the destination
- // is a struct and the input contains object keys which do not match any
- // non-ignored, exported fields in the destination.
- DisallowUnknownFields bool
-
- // CopyString indicates decoder to decode string values by copying instead of referring.
- CopyString bool
-
- // ValidateString indicates decoder and encoder to validate string values: decoder will return errors
- // when unescaped control chars(\u0000-\u001f) in the string value of JSON.
- ValidateString bool
-
- // NoValidateJSONMarshaler indicates that the encoder should not validate the output string
- // after encoding the JSONMarshaler to JSON.
- NoValidateJSONMarshaler bool
-
- // NoValidateJSONSkip indicates the decoder should not validate the JSON value when skipping it,
- // such as unknown-fields, mismatched-type, redundant elements..
- NoValidateJSONSkip bool
-
- // NoEncoderNewline indicates that the encoder should not add a newline after every message
- NoEncoderNewline bool
-
- // Encode Infinity or Nan float into `null`, instead of returning an error.
- EncodeNullForInfOrNan bool
-}
-
-var (
- // ConfigDefault is the default config of APIs, aiming at efficiency and safety.
- ConfigDefault = Config{}.Froze()
-
- // ConfigStd is the standard config of APIs, aiming at being compatible with encoding/json.
- ConfigStd = Config{
- EscapeHTML : true,
- SortMapKeys: true,
- CompactMarshaler: true,
- CopyString : true,
- ValidateString : true,
- }.Froze()
-
- // ConfigFastest is the fastest config of APIs, aiming at speed.
- ConfigFastest = Config{
- NoQuoteTextMarshaler: true,
- NoValidateJSONMarshaler: true,
- NoValidateJSONSkip: true,
- }.Froze()
-)
-
-
-// API is a binding of specific config.
-// This interface is inspired by github.com/json-iterator/go,
-// and has same behaviors under equivalent config.
-type API interface {
- // MarshalToString returns the JSON encoding string of v
- MarshalToString(v interface{}) (string, error)
- // Marshal returns the JSON encoding bytes of v.
- Marshal(v interface{}) ([]byte, error)
- // MarshalIndent returns the JSON encoding bytes with indent and prefix.
- MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
- // UnmarshalFromString parses the JSON-encoded bytes and stores the result in the value pointed to by v.
- UnmarshalFromString(str string, v interface{}) error
- // Unmarshal parses the JSON-encoded string and stores the result in the value pointed to by v.
- Unmarshal(data []byte, v interface{}) error
- // NewEncoder create a Encoder holding writer
- NewEncoder(writer io.Writer) Encoder
- // NewDecoder create a Decoder holding reader
- NewDecoder(reader io.Reader) Decoder
- // Valid validates the JSON-encoded bytes and reports if it is valid
- Valid(data []byte) bool
-}
-
-// Encoder encodes JSON into io.Writer
-type Encoder interface {
- // Encode writes the JSON encoding of v to the stream, followed by a newline character.
- Encode(val interface{}) error
- // SetEscapeHTML specifies whether problematic HTML characters
- // should be escaped inside JSON quoted strings.
- // The default behavior NOT ESCAPE
- SetEscapeHTML(on bool)
- // SetIndent instructs the encoder to format each subsequent encoded value
- // as if indented by the package-level function Indent(dst, src, prefix, indent).
- // Calling SetIndent("", "") disables indentation
- SetIndent(prefix, indent string)
-}
-
-// Decoder decodes JSON from io.Read
-type Decoder interface {
- // Decode reads the next JSON-encoded value from its input and stores it in the value pointed to by v.
- Decode(val interface{}) error
- // Buffered returns a reader of the data remaining in the Decoder's buffer.
- // The reader is valid until the next call to Decode.
- Buffered() io.Reader
- // DisallowUnknownFields causes the Decoder to return an error when the destination is a struct
- // and the input contains object keys which do not match any non-ignored, exported fields in the destination.
- DisallowUnknownFields()
- // More reports whether there is another element in the current array or object being parsed.
- More() bool
- // UseNumber causes the Decoder to unmarshal a number into an interface{} as a Number instead of as a float64.
- UseNumber()
-}
-
-// Marshal returns the JSON encoding bytes of v.
-func Marshal(val interface{}) ([]byte, error) {
- return ConfigDefault.Marshal(val)
-}
-
-// MarshalIndent is like Marshal but applies Indent to format the output.
-// Each JSON element in the output will begin on a new line beginning with prefix
-// followed by one or more copies of indent according to the indentation nesting.
-func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
- return ConfigDefault.MarshalIndent(v, prefix, indent)
-}
-
-// MarshalString returns the JSON encoding string of v.
-func MarshalString(val interface{}) (string, error) {
- return ConfigDefault.MarshalToString(val)
-}
-
-// Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v.
-// NOTICE: This API copies given buffer by default,
-// if you want to pass JSON more efficiently, use UnmarshalString instead.
-func Unmarshal(buf []byte, val interface{}) error {
- return ConfigDefault.Unmarshal(buf, val)
-}
-
-// UnmarshalString is like Unmarshal, except buf is a string.
-func UnmarshalString(buf string, val interface{}) error {
- return ConfigDefault.UnmarshalFromString(buf, val)
-}
-
-// Get searches and locates the given path from src json,
-// and returns a ast.Node representing the partially json.
-//
-// Each path arg must be integer or string:
-// - Integer is target index(>=0), means searching current node as array.
-// - String is target key, means searching current node as object.
-//
-//
-// Notice: It expects the src json is **Well-formed** and **Immutable** when calling,
-// otherwise it may return unexpected result.
-// Considering memory safety, the returned JSON is **Copied** from the input
-func Get(src []byte, path ...interface{}) (ast.Node, error) {
- return GetCopyFromString(rt.Mem2Str(src), path...)
-}
-
-//GetWithOptions searches and locates the given path from src json,
-// with specific options of ast.Searcher
-func GetWithOptions(src []byte, opts ast.SearchOptions, path ...interface{}) (ast.Node, error) {
- s := ast.NewSearcher(rt.Mem2Str(src))
- s.SearchOptions = opts
- return s.GetByPath(path...)
-}
-
-// GetFromString is same with Get except src is string.
-//
-// WARNING: The returned JSON is **Referenced** from the input.
-// Caching or long-time holding the returned node may cause OOM.
-// If your src is big, consider use GetFromStringCopy().
-func GetFromString(src string, path ...interface{}) (ast.Node, error) {
- return ast.NewSearcher(src).GetByPath(path...)
-}
-
-// GetCopyFromString is same with Get except src is string
-func GetCopyFromString(src string, path ...interface{}) (ast.Node, error) {
- return ast.NewSearcher(src).GetByPathCopy(path...)
-}
-
-// Valid reports whether data is a valid JSON encoding.
-func Valid(data []byte) bool {
- return ConfigDefault.Valid(data)
-}
-
-// Valid reports whether data is a valid JSON encoding.
-func ValidString(data string) bool {
- return ConfigDefault.Valid(rt.Str2Mem(data))
-}