From 945f4d66954928402648aaecdb40127aee08826b Mon Sep 17 00:00:00 2001 From: Roman Volosatovs Date: Tue, 18 Apr 2017 15:52:21 +0200 Subject: [PATCH 1/3] properly handle various slice/array types --- viper.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/viper.go b/viper.go index 31b41a6..be8500a 100644 --- a/viper.go +++ b/viper.go @@ -620,8 +620,14 @@ func (v *Viper) Get(key string) interface{} { return cast.ToTime(val) case time.Duration: return cast.ToDuration(val) + case []bool: + return cast.ToBoolSlice(val) case []string: return cast.ToStringSlice(val) + case []int: + return cast.ToIntSlice(val) + case []time.Duration: + return cast.ToDurationSlice(val) } return val } @@ -893,7 +899,7 @@ func (v *Viper) find(lcaseKey string) interface{} { return cast.ToInt(flag.ValueString()) case "bool": return cast.ToBool(flag.ValueString()) - case "stringSlice": + case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice": s := strings.TrimPrefix(flag.ValueString(), "[") s = strings.TrimSuffix(s, "]") res, _ := readAsCSV(s) @@ -962,7 +968,7 @@ func (v *Viper) find(lcaseKey string) interface{} { return cast.ToInt(flag.ValueString()) case "bool": return cast.ToBool(flag.ValueString()) - case "stringSlice": + case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice": s := strings.TrimPrefix(flag.ValueString(), "[") s = strings.TrimSuffix(s, "]") res, _ := readAsCSV(s) From 6152d25e5599a864f4efe727d1fc5b2b586f5e89 Mon Sep 17 00:00:00 2001 From: Roman Volosatovs Date: Tue, 18 Apr 2017 15:54:21 +0200 Subject: [PATCH 2/3] properly handle uint types --- viper.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/viper.go b/viper.go index be8500a..1125aad 100644 --- a/viper.go +++ b/viper.go @@ -614,6 +614,8 @@ func (v *Viper) Get(key string) interface{} { return cast.ToString(val) case int64, int32, int16, int8, int: return cast.ToInt(val) + case uint64, uint32, uint16, uint8, uint: + return cast.ToUint(val) case float64, float32: return cast.ToFloat64(val) case time.Time: @@ -897,6 +899,8 @@ func (v *Viper) find(lcaseKey string) interface{} { switch flag.ValueType() { case "int", "int8", "int16", "int32", "int64": return cast.ToInt(flag.ValueString()) + case "uint", "uint8", "uint16", "uint32", "uint64": + return cast.ToUint(flag.ValueString()) case "bool": return cast.ToBool(flag.ValueString()) case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice": @@ -966,6 +970,8 @@ func (v *Viper) find(lcaseKey string) interface{} { switch flag.ValueType() { case "int", "int8", "int16", "int32", "int64": return cast.ToInt(flag.ValueString()) + case "uint", "uint8", "uint16", "uint32", "uint64": + return cast.ToUint(flag.ValueString()) case "bool": return cast.ToBool(flag.ValueString()) case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice": From 21a8c833617ab157957c9e5909521940ff004f28 Mon Sep 17 00:00:00 2001 From: Roman Volosatovs Date: Tue, 18 Apr 2017 15:58:37 +0200 Subject: [PATCH 3/3] respect durationSlice type (spf13/pflag#122) --- viper.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/viper.go b/viper.go index 1125aad..907cfe5 100644 --- a/viper.go +++ b/viper.go @@ -903,7 +903,7 @@ func (v *Viper) find(lcaseKey string) interface{} { return cast.ToUint(flag.ValueString()) case "bool": return cast.ToBool(flag.ValueString()) - case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice": + case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice", "durationSlice": s := strings.TrimPrefix(flag.ValueString(), "[") s = strings.TrimSuffix(s, "]") res, _ := readAsCSV(s) @@ -974,7 +974,7 @@ func (v *Viper) find(lcaseKey string) interface{} { return cast.ToUint(flag.ValueString()) case "bool": return cast.ToBool(flag.ValueString()) - case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice": + case "stringSlice", "stringArray", "boolSlice", "ipSlice", "uintSlice", "intSlice", "durationSlice": s := strings.TrimPrefix(flag.ValueString(), "[") s = strings.TrimSuffix(s, "]") res, _ := readAsCSV(s)