MCPcopy
hub / github.com/cli/cli / exportData

Method exportData

pkg/cmdutil/json_flags.go:259–290  ·  view source on GitHub ↗
(v reflect.Value)

Source from the content-addressed store, hash-verified

257}
258
259func (e *jsonExporter) exportData(v reflect.Value) interface{} {
260 switch v.Kind() {
261 case reflect.Ptr, reflect.Interface:
262 if !v.IsNil() {
263 return e.exportData(v.Elem())
264 }
265 case reflect.Slice:
266 a := make([]interface{}, v.Len())
267 for i := 0; i < v.Len(); i++ {
268 a[i] = e.exportData(v.Index(i))
269 }
270 return a
271 case reflect.Map:
272 t := reflect.MapOf(v.Type().Key(), emptyInterfaceType)
273 m := reflect.MakeMapWithSize(t, v.Len())
274 iter := v.MapRange()
275 for iter.Next() {
276 ve := reflect.ValueOf(e.exportData(iter.Value()))
277 m.SetMapIndex(iter.Key(), ve)
278 }
279 return m.Interface()
280 case reflect.Struct:
281 if v.CanAddr() && reflect.PointerTo(v.Type()).Implements(exportableType) {
282 ve := v.Addr().Interface().(exportable)
283 return ve.ExportData(e.fields)
284 } else if v.Type().Implements(exportableType) {
285 ve := v.Interface().(exportable)
286 return ve.ExportData(e.fields)
287 }
288 }
289 return v.Interface()
290}
291
292type exportable interface {
293 ExportData([]string) map[string]interface{}

Callers 1

WriteMethod · 0.95

Calls 4

ValueMethod · 0.80
LenMethod · 0.65
ExportDataMethod · 0.65
TypeMethod · 0.45

Tested by

no test coverage detected