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

Method encode

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

Source from the content-addressed store, hash-verified

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