From 61c17d0781a546c8d7f3540b559cdaf147b9266a Mon Sep 17 00:00:00 2001 From: Trevor Foster Date: Sat, 28 Mar 2020 00:14:46 -0400 Subject: [PATCH] extract parsing into single func --- viper.go | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/viper.go b/viper.go index 5c38cef..2f82f91 100644 --- a/viper.go +++ b/viper.go @@ -1084,18 +1084,7 @@ func (v *Viper) find(lcaseKey string, flagDefault bool) interface{} { res, _ := readAsCSV(s) return cast.ToIntSlice(res) case "stringToString": - s := strings.TrimPrefix(flag.ValueString(), "[") - s = strings.TrimSuffix(s, "]") - if s == "" { - return nil - } - elements := strings.Split(s, ",") - result := make(map[string]string, len(elements)) - for _, element := range elements { - pair := strings.SplitN(element, "=", 2) - result[pair[0]] = pair[1] - } - return result + return parseStringToStringFlagValue(flag.ValueString()) default: return flag.ValueString() } @@ -1172,18 +1161,7 @@ func (v *Viper) find(lcaseKey string, flagDefault bool) interface{} { res, _ := readAsCSV(s) return cast.ToIntSlice(res) case "stringToString": - s := strings.TrimPrefix(flag.ValueString(), "[") - s = strings.TrimSuffix(s, "]") - if s == "" { - return nil - } - elements := strings.Split(s, ",") - result := make(map[string]string, len(elements)) - for _, element := range elements { - pair := strings.SplitN(element, "=", 2) - result[pair[0]] = pair[1] - } - return result + return parseStringToStringFlagValue(flag.ValueString()) default: return flag.ValueString() } @@ -1203,6 +1181,21 @@ func readAsCSV(val string) ([]string, error) { return csvReader.Read() } +func parseStringToStringFlagValue(val string) map[string]string { + s := strings.TrimPrefix(val, "[") + s = strings.TrimSuffix(s, "]") + if s == "" { + return nil + } + elements := strings.Split(s, ",") + result := make(map[string]string, len(elements)) + for _, element := range elements { + pair := strings.SplitN(element, "=", 2) + result[pair[0]] = pair[1] + } + return result +} + // IsSet checks to see if the key has been set in any of the data locations. // IsSet is case-insensitive for a key. func IsSet(key string) bool { return v.IsSet(key) }