encoder_native.go raw

   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