MCPcopy Index your code
hub / github.com/segmentio/encoding / encode

Method encode

thrift/encode.go:263–327  ·  view source on GitHub ↗
(w Writer, v reflect.Value, flags flags)

Source from the content-addressed store, hash-verified

261}
262
263func (enc *structEncoder) encode(w Writer, v reflect.Value, flags flags) error {
264 useDeltaEncoding := flags.have(useDeltaEncoding)
265 coalesceBoolFields := flags.have(coalesceBoolFields)
266 numFields := int16(0)
267 lastFieldID := int16(0)
268
269encodeFields:
270 for _, f := range enc.fields {
271 x := v
272 for _, i := range f.index {
273 if x.Kind() == reflect.Ptr {
274 x = x.Elem()
275 }
276 if x = x.Field(i); x.Kind() == reflect.Ptr {
277 if x.IsNil() {
278 continue encodeFields
279 }
280 }
281 }
282
283 if !f.flags.have(required) && x.IsZero() {
284 continue encodeFields
285 }
286
287 field := Field{
288 ID: f.id,
289 Type: f.typ,
290 }
291
292 if useDeltaEncoding {
293 if delta := field.ID - lastFieldID; delta <= 15 {
294 field.ID = delta
295 field.Delta = true
296 }
297 }
298
299 skipValue := coalesceBoolFields && field.Type == BOOL
300 if skipValue && isTrue(x) {
301 field.Type = TRUE
302 }
303
304 if err := w.WriteField(field); err != nil {
305 return err
306 }
307
308 if !skipValue {
309 if err := f.encode(w, x, flags); err != nil {
310 return err
311 }
312 }
313
314 numFields++
315 lastFieldID = f.id
316 }
317
318 if err := w.WriteField(Field{Type: STOP}); err != nil {
319 return err
320 }

Callers 8

MarshalFunction · 0.80
MarshalToFunction · 0.80
mapEncodeFuncOfFunction · 0.80
pointerEncodeFuncOfFunction · 0.80
structEncodeFuncOfFunction · 0.80
sliceEncodeFuncOfFunction · 0.80
encodeStructMethod · 0.80
AppendFunction · 0.80

Calls 6

isTrueFunction · 0.85
haveMethod · 0.80
KindMethod · 0.65
ElemMethod · 0.65
FieldMethod · 0.65
WriteFieldMethod · 0.65

Tested by

no test coverage detected