// FlattenMap is used to flatten out a `map[string]map[string]*` func (resource *Resource) FlattenMap(key string) { keys := resource.Keys res := resource.Result.(map[string]interface{}) if m, ok := res[key]; ok && util.Contains(keys, key) { switch m.(type) { case []map[string]interface{}: for i, hashmap := range m.([]map[string]interface{}) { for k, v := range hashmap { newKey := fmt.Sprintf("%s%d:%s", key, i, k) res[newKey] = v keys = append(keys, newKey) } } case map[string]interface{}: for k, v := range m.(map[string]interface{}) { newKey := fmt.Sprintf("%s:%s", key, k) res[newKey] = v keys = append(keys, newKey) } case map[string]string: for k, v := range m.(map[string]string) { newKey := fmt.Sprintf("%s:%s", key, k) res[newKey] = v keys = append(keys, newKey) } } } delete(res, key) resource.Keys = util.RemoveFromList(keys, key) }
// limitFields returns only the fields the user specified in the `fields` flag. If // the flag wasn't provided, all fields are returned. func (ctx *Context) limitFields(resource *Resource) { if ctx.CLIContext.IsSet("fields") { fields := strings.Split(strings.ToLower(ctx.CLIContext.String("fields")), ",") newKeys := []string{} for _, key := range resource.Keys { if util.Contains(fields, strings.Join(strings.Split(strings.ToLower(key), " "), "-")) { newKeys = append(newKeys, key) } } resource.Keys = newKeys } }
// FlattenMap is used to flatten out a `map[string]map[string]*` func (resource *Resource) FlattenMap(key string) { res := resource.Result.(map[string]interface{}) if m, ok := res[key]; ok && util.Contains(resource.Keys, key) { switch m.(type) { case []map[string]interface{}: for i, hashmap := range m.([]map[string]interface{}) { for k, v := range hashmap { newKey := fmt.Sprintf("%s%d:%s", key, i, k) res[newKey] = v resource.Keys = append(resource.Keys, newKey) resource.FlattenMap(newKey) } } case []interface{}: for i, element := range m.([]interface{}) { newKey := fmt.Sprintf("%s%d", key, i) res[newKey] = element resource.Keys = append(resource.Keys, newKey) resource.FlattenMap(newKey) } case map[string]interface{}, map[interface{}]interface{}: mMap := toStringKeys(m) for k, v := range mMap { newKey := fmt.Sprintf("%s:%s", key, k) res[newKey] = v resource.Keys = append(resource.Keys, newKey) resource.FlattenMap(newKey) } case map[string]string: for k, v := range m.(map[string]string) { newKey := fmt.Sprintf("%s:%s", key, k) res[newKey] = v resource.Keys = append(resource.Keys, newKey) } default: return } delete(res, key) resource.Keys = util.RemoveFromList(resource.Keys, key) } }