MCPcopy Create free account
hub / github.com/VirusTotal/vt-cli / Encode

Method Encode

csv/csv.go:35–98  ·  view source on GitHub ↗

Encode writes the CSV encoding of v to the stream.

(v interface{})

Source from the content-addressed store, hash-verified

33
34// Encode writes the CSV encoding of v to the stream.
35func (enc *Encoder) Encode(v interface{}) error {
36 if v == nil {
37 _, err := enc.w.Write([]byte("null"))
38 return err
39 }
40
41 var items []interface{}
42 val := reflect.ValueOf(v)
43 switch val.Kind() {
44 case reflect.Slice:
45 items = make([]interface{}, val.Len())
46 for i := 0; i < val.Len(); i++ {
47 items[i] = val.Index(i).Interface()
48 }
49 default:
50 items = []interface{}{v}
51 }
52 numObjects := len(items)
53 flattenObjects := make([]map[string]interface{}, numObjects)
54 for i := 0; i < numObjects; i++ {
55 f, err := flatten(items[i])
56 if err != nil {
57 return err
58 }
59 flattenObjects[i] = f
60 }
61
62 keys := make(map[string]struct{})
63 for _, o := range flattenObjects {
64 for k := range o {
65 keys[k] = struct{}{}
66 }
67 }
68
69 header := make([]string, len(keys))
70 i := 0
71 for k := range keys {
72 header[i] = k
73 i++
74 }
75 sort.Strings(header)
76
77 w := csv.NewWriter(enc.w)
78 if len(header) > 1 || len(header) == 0 && header[0] != "" {
79 if err := w.Write(header); err != nil {
80 return err
81 }
82 }
83
84 for _, o := range flattenObjects {
85 record := make([]string, len(keys))
86 for i, key := range header {
87 val, ok := o[key]
88 if ok && val != nil {
89 record[i] = fmt.Sprintf("%v", val)
90 }
91 }
92 if err := w.Write(record); err != nil {

Callers 5

PrintMethod · 0.95
NewInitCmdFunction · 0.95
NewIOCStreamDeleteCmdFunction · 0.45
NewMetaCmdFunction · 0.45
TestCSVFunction · 0.45

Calls 2

flattenFunction · 0.85
LenMethod · 0.45

Tested by 1

TestCSVFunction · 0.36