You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
950 B
35 lines
950 B
package utils
|
|
|
|
import "fmt"
|
|
|
|
// stringifyKeysMapValue recurses into in and changes all instances of
|
|
// map[interface{}]interface{} to map[string]interface{}. This is useful to
|
|
// work around the impedence mismatch between JSON and YAML unmarshaling that's
|
|
// described here: https://github.com/go-yaml/yaml/issues/139
|
|
//
|
|
// Inspired by https://github.com/stripe/stripe-mock, MIT licensed
|
|
func StringifyYAMLMapKeys(in interface{}) interface{} {
|
|
switch in := in.(type) {
|
|
case []interface{}:
|
|
res := make([]interface{}, len(in))
|
|
for i, v := range in {
|
|
res[i] = StringifyYAMLMapKeys(v)
|
|
}
|
|
return res
|
|
case map[string]interface{}:
|
|
res := make(map[string]interface{})
|
|
for k, v := range in {
|
|
res[k] = StringifyYAMLMapKeys(v)
|
|
}
|
|
return res
|
|
case map[interface{}]interface{}:
|
|
res := make(map[string]interface{})
|
|
for k, v := range in {
|
|
res[fmt.Sprintf("%v", k)] = StringifyYAMLMapKeys(v)
|
|
}
|
|
return res
|
|
default:
|
|
return in
|
|
}
|
|
}
|