Code refactoring for bpa operator
[icn.git] / cmd / bpa-operator / vendor / github.com / json-iterator / go / adapter.go
1 package jsoniter
2
3 import (
4         "bytes"
5         "io"
6 )
7
8 // RawMessage to make replace json with jsoniter
9 type RawMessage []byte
10
11 // Unmarshal adapts to json/encoding Unmarshal API
12 //
13 // Unmarshal parses the JSON-encoded data and stores the result in the value pointed to by v.
14 // Refer to https://godoc.org/encoding/json#Unmarshal for more information
15 func Unmarshal(data []byte, v interface{}) error {
16         return ConfigDefault.Unmarshal(data, v)
17 }
18
19 // UnmarshalFromString convenient method to read from string instead of []byte
20 func UnmarshalFromString(str string, v interface{}) error {
21         return ConfigDefault.UnmarshalFromString(str, v)
22 }
23
24 // Get quick method to get value from deeply nested JSON structure
25 func Get(data []byte, path ...interface{}) Any {
26         return ConfigDefault.Get(data, path...)
27 }
28
29 // Marshal adapts to json/encoding Marshal API
30 //
31 // Marshal returns the JSON encoding of v, adapts to json/encoding Marshal API
32 // Refer to https://godoc.org/encoding/json#Marshal for more information
33 func Marshal(v interface{}) ([]byte, error) {
34         return ConfigDefault.Marshal(v)
35 }
36
37 // MarshalIndent same as json.MarshalIndent. Prefix is not supported.
38 func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
39         return ConfigDefault.MarshalIndent(v, prefix, indent)
40 }
41
42 // MarshalToString convenient method to write as string instead of []byte
43 func MarshalToString(v interface{}) (string, error) {
44         return ConfigDefault.MarshalToString(v)
45 }
46
47 // NewDecoder adapts to json/stream NewDecoder API.
48 //
49 // NewDecoder returns a new decoder that reads from r.
50 //
51 // Instead of a json/encoding Decoder, an Decoder is returned
52 // Refer to https://godoc.org/encoding/json#NewDecoder for more information
53 func NewDecoder(reader io.Reader) *Decoder {
54         return ConfigDefault.NewDecoder(reader)
55 }
56
57 // Decoder reads and decodes JSON values from an input stream.
58 // Decoder provides identical APIs with json/stream Decoder (Token() and UseNumber() are in progress)
59 type Decoder struct {
60         iter *Iterator
61 }
62
63 // Decode decode JSON into interface{}
64 func (adapter *Decoder) Decode(obj interface{}) error {
65         if adapter.iter.head == adapter.iter.tail && adapter.iter.reader != nil {
66                 if !adapter.iter.loadMore() {
67                         return io.EOF
68                 }
69         }
70         adapter.iter.ReadVal(obj)
71         err := adapter.iter.Error
72         if err == io.EOF {
73                 return nil
74         }
75         return adapter.iter.Error
76 }
77
78 // More is there more?
79 func (adapter *Decoder) More() bool {
80         iter := adapter.iter
81         if iter.Error != nil {
82                 return false
83         }
84         c := iter.nextToken()
85         if c == 0 {
86                 return false
87         }
88         iter.unreadByte()
89         return c != ']' && c != '}'
90 }
91
92 // Buffered remaining buffer
93 func (adapter *Decoder) Buffered() io.Reader {
94         remaining := adapter.iter.buf[adapter.iter.head:adapter.iter.tail]
95         return bytes.NewReader(remaining)
96 }
97
98 // UseNumber causes the Decoder to unmarshal a number into an interface{} as a
99 // Number instead of as a float64.
100 func (adapter *Decoder) UseNumber() {
101         cfg := adapter.iter.cfg.configBeforeFrozen
102         cfg.UseNumber = true
103         adapter.iter.cfg = cfg.frozeWithCacheReuse(adapter.iter.cfg.extraExtensions)
104 }
105
106 // DisallowUnknownFields causes the Decoder to return an error when the destination
107 // is a struct and the input contains object keys which do not match any
108 // non-ignored, exported fields in the destination.
109 func (adapter *Decoder) DisallowUnknownFields() {
110         cfg := adapter.iter.cfg.configBeforeFrozen
111         cfg.DisallowUnknownFields = true
112         adapter.iter.cfg = cfg.frozeWithCacheReuse(adapter.iter.cfg.extraExtensions)
113 }
114
115 // NewEncoder same as json.NewEncoder
116 func NewEncoder(writer io.Writer) *Encoder {
117         return ConfigDefault.NewEncoder(writer)
118 }
119
120 // Encoder same as json.Encoder
121 type Encoder struct {
122         stream *Stream
123 }
124
125 // Encode encode interface{} as JSON to io.Writer
126 func (adapter *Encoder) Encode(val interface{}) error {
127         adapter.stream.WriteVal(val)
128         adapter.stream.WriteRaw("\n")
129         adapter.stream.Flush()
130         return adapter.stream.Error
131 }
132
133 // SetIndent set the indention. Prefix is not supported
134 func (adapter *Encoder) SetIndent(prefix, indent string) {
135         config := adapter.stream.cfg.configBeforeFrozen
136         config.IndentionStep = len(indent)
137         adapter.stream.cfg = config.frozeWithCacheReuse(adapter.stream.cfg.extraExtensions)
138 }
139
140 // SetEscapeHTML escape html by default, set to false to disable
141 func (adapter *Encoder) SetEscapeHTML(escapeHTML bool) {
142         config := adapter.stream.cfg.configBeforeFrozen
143         config.EscapeHTML = escapeHTML
144         adapter.stream.cfg = config.frozeWithCacheReuse(adapter.stream.cfg.extraExtensions)
145 }
146
147 // Valid reports whether data is a valid JSON encoding.
148 func Valid(data []byte) bool {
149         return ConfigDefault.Valid(data)
150 }