From 7b6bca9b64e9666e5fb67ae3d995d48a3e22dbec Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Fri, 13 Jul 2018 13:02:21 -0700 Subject: [PATCH] Add util methods to convert to idiomatic json/yaml key formats --- types/convert/convert.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/types/convert/convert.go b/types/convert/convert.go index 902e341d..5e3fd46c 100644 --- a/types/convert/convert.go +++ b/types/convert/convert.go @@ -211,3 +211,40 @@ func EncodeToMap(obj interface{}) (map[string]interface{}, error) { dec.UseNumber() return result, dec.Decode(&result) } + +func ToJSONKey(str string) string { + parts := strings.Split(str, "_") + for i := 1; i < len(parts); i++ { + parts[i] = strings.Title(parts[i]) + } + + return strings.Join(parts, "") +} + +func ToYAMLKey(str string) string { + var result []rune + cap := false + + for i, r := range []rune(str) { + if i == 0 { + if unicode.IsUpper(r) { + cap = true + } + result = append(result, unicode.ToLower(r)) + continue + } + + if unicode.IsUpper(r) { + if cap { + result = append(result, unicode.ToLower(r)) + } else { + result = append(result, '_', unicode.ToLower(r)) + } + } else { + cap = false + result = append(result, r) + } + } + + return string(result) +}