MCPcopy
hub / github.com/google/gopacket / layerGoString

Function layerGoString

packet.go:349–390  ·  view source on GitHub ↗
(i interface{}, b *bytes.Buffer)

Source from the content-addressed store, hash-verified

347}
348
349func layerGoString(i interface{}, b *bytes.Buffer) {
350 if s, ok := i.(fmt.GoStringer); ok {
351 b.WriteString(s.GoString())
352 return
353 }
354
355 var v reflect.Value
356 var ok bool
357 if v, ok = i.(reflect.Value); !ok {
358 v = reflect.ValueOf(i)
359 }
360 switch v.Kind() {
361 case reflect.Ptr, reflect.Interface:
362 if v.Kind() == reflect.Ptr {
363 b.WriteByte('&')
364 }
365 layerGoString(v.Elem().Interface(), b)
366 case reflect.Struct:
367 t := v.Type()
368 b.WriteString(t.String())
369 b.WriteByte('{')
370 for i := 0; i < v.NumField(); i++ {
371 if i > 0 {
372 b.WriteString(", ")
373 }
374 if t.Field(i).Name == "BaseLayer" {
375 fmt.Fprintf(b, "BaseLayer:%s", baseLayerString(v.Field(i)))
376 } else if v.Field(i).Kind() == reflect.Struct {
377 fmt.Fprintf(b, "%s:", t.Field(i).Name)
378 layerGoString(v.Field(i), b)
379 } else if v.Field(i).Kind() == reflect.Ptr {
380 b.WriteByte('&')
381 layerGoString(v.Field(i), b)
382 } else {
383 fmt.Fprintf(b, "%s:%#v", t.Field(i).Name, v.Field(i))
384 }
385 }
386 b.WriteByte('}')
387 default:
388 fmt.Fprintf(b, "%#v", i)
389 }
390}
391
392// LayerGoString returns a representation of the layer in Go syntax,
393// taking care to shorten "very long" BaseLayer byte slices

Callers 1

LayerGoStringFunction · 0.85

Calls 5

baseLayerStringFunction · 0.85
InterfaceMethod · 0.80
StringMethod · 0.65
GoStringMethod · 0.45
TypeMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…