MCPcopy Create free account
hub / github.com/auxten/postgresql-parser / encode

Method encode

pkg/util/json/encode.go:116–158  ·  view source on GitHub ↗
(appendTo []byte)

Source from the content-addressed store, hash-verified

114}
115
116func (j jsonObject) encode(appendTo []byte) (e jEntry, b []byte, err error) {
117 encodingStartPosition := len(appendTo)
118 // Object container header.
119 appendTo = encoding.EncodeUint32Ascending(appendTo, objectContainerTag|uint32(len(j)))
120 // Reserve space for the key and value JEntries and store where they start so
121 // we can fill them in later.
122 jEntryIdx := len(appendTo)
123 for i := 0; i < len(j)*2; i++ {
124 appendTo = append(appendTo, 0, 0, 0, 0)
125 }
126 offset := uint32(0)
127 // Encode all keys.
128 for i := 0; i < len(j); i++ {
129 var nextJEntry jEntry
130 nextJEntry, appendTo, err = j[i].k.encode(appendTo)
131 if err != nil {
132 return jEntry{}, appendTo, err
133 }
134
135 length := nextJEntry.length
136 offset += length
137
138 appendTo = encoding.PutUint32Ascending(appendTo, nextJEntry.encoded(encodingModeForIdx(i, offset)), jEntryIdx+i*4)
139 }
140 // Encode all values.
141 for i := 0; i < len(j); i++ {
142 var nextJEntry jEntry
143 nextJEntry, appendTo, err = j[i].v.encode(appendTo)
144 if err != nil {
145 return jEntry{}, appendTo, err
146 }
147
148 length := nextJEntry.length
149 offset += length
150
151 appendTo = encoding.PutUint32Ascending(appendTo, nextJEntry.encoded(encodingModeForIdx(i, offset)), jEntryIdx+(len(j)+i)*4)
152 }
153 lengthInBytes := len(appendTo) - encodingStartPosition
154 if err := checkLength(lengthInBytes); err != nil {
155 return jEntry{}, b, err
156 }
157 return makeContainerJEntry(lengthInBytes), appendTo, nil
158}
159
160// EncodeJSON encodes a JSON value as a sequence of bytes.
161func EncodeJSON(appendTo []byte, j JSON) ([]byte, error) {

Callers

nothing calls this directly

Calls 7

encodedMethod · 0.95
EncodeUint32AscendingFunction · 0.92
PutUint32AscendingFunction · 0.92
encodingModeForIdxFunction · 0.85
checkLengthFunction · 0.85
makeContainerJEntryFunction · 0.85
encodeMethod · 0.65

Tested by

no test coverage detected