1 // +build amd64,go1.17,!go1.25 arm64,go1.20,!go1.25
2 3 /*
4 * Copyright 2023 ByteDance Inc.
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18 19 package encoder
20 21 import (
22 `github.com/bytedance/sonic/internal/encoder`
23 )
24 25 // EnableFallback indicates if encoder use fallback
26 const EnableFallback = false
27 28 // Encoder represents a specific set of encoder configurations.
29 type Encoder = encoder.Encoder
30 31 // StreamEncoder uses io.Writer as input.
32 type StreamEncoder = encoder.StreamEncoder
33 34 // Options is a set of encoding options.
35 type Options = encoder.Options
36 37 const (
38 // SortMapKeys indicates that the keys of a map needs to be sorted
39 // before serializing into JSON.
40 // WARNING: This hurts performance A LOT, USE WITH CARE.
41 SortMapKeys Options = encoder.SortMapKeys
42 43 // EscapeHTML indicates encoder to escape all HTML characters
44 // after serializing into JSON (see https://pkg.go.dev/encoding/json#HTMLEscape).
45 // WARNING: This hurts performance A LOT, USE WITH CARE.
46 EscapeHTML Options = encoder.EscapeHTML
47 48 // CompactMarshaler indicates that the output JSON from json.Marshaler
49 // is always compact and needs no validation
50 CompactMarshaler Options = encoder.CompactMarshaler
51 52 // NoQuoteTextMarshaler indicates that the output text from encoding.TextMarshaler
53 // is always escaped string and needs no quoting
54 NoQuoteTextMarshaler Options = encoder.NoQuoteTextMarshaler
55 56 // NoNullSliceOrMap indicates all empty Array or Object are encoded as '[]' or '{}',
57 // instead of 'null'
58 NoNullSliceOrMap Options = encoder.NoNullSliceOrMap
59 60 // ValidateString indicates that encoder should validate the input string
61 // before encoding it into JSON.
62 ValidateString Options = encoder.ValidateString
63 64 // NoValidateJSONMarshaler indicates that the encoder should not validate the output string
65 // after encoding the JSONMarshaler to JSON.
66 NoValidateJSONMarshaler Options = encoder.NoValidateJSONMarshaler
67 68 // NoEncoderNewline indicates that the encoder should not add a newline after every message
69 NoEncoderNewline Options = encoder.NoEncoderNewline
70 71 // CompatibleWithStd is used to be compatible with std encoder.
72 CompatibleWithStd Options = encoder.CompatibleWithStd
73 74 // Encode Infinity or Nan float into `null`, instead of returning an error.
75 EncodeNullForInfOrNan Options = encoder.EncodeNullForInfOrNan
76 )
77 78 79 var (
80 // Encode returns the JSON encoding of val, encoded with opts.
81 Encode = encoder.Encode
82 83 // EncodeInto is like Encode but uses a user-supplied buffer instead of allocating a new one.
84 EncodeIndented = encoder.EncodeIndented
85 86 // EncodeIndented is like Encode but applies Indent to format the output.
87 // Each JSON element in the output will begin on a new line beginning with prefix
88 // followed by one or more copies of indent according to the indentation nesting.
89 EncodeInto = encoder.EncodeInto
90 91 // HTMLEscape appends to dst the JSON-encoded src with <, >, &, U+2028 and U+2029
92 // characters inside string literals changed to \u003c, \u003e, \u0026, \u2028, \u2029
93 // so that the JSON will be safe to embed inside HTML <script> tags.
94 // For historical reasons, web browsers don't honor standard HTML
95 // escaping within <script> tags, so an alternative JSON encoding must
96 // be used.
97 HTMLEscape = encoder.HTMLEscape
98 99 // Pretouch compiles vt ahead-of-time to avoid JIT compilation on-the-fly, in
100 // order to reduce the first-hit latency.
101 //
102 // Opts are the compile options, for example, "option.WithCompileRecursiveDepth" is
103 // a compile option to set the depth of recursive compile for the nested struct type.
104 Pretouch = encoder.Pretouch
105 106 // Quote returns the JSON-quoted version of s.
107 Quote = encoder.Quote
108 109 // Valid validates json and returns first non-blank character position,
110 // if it is only one valid json value.
111 // Otherwise returns invalid character position using start.
112 //
113 // Note: it does not check for the invalid UTF-8 characters.
114 Valid = encoder.Valid
115 116 // NewStreamEncoder adapts to encoding/json.NewDecoder API.
117 //
118 // NewStreamEncoder returns a new encoder that write to w.
119 NewStreamEncoder = encoder.NewStreamEncoder
120 )
121