Skip to content

Commit 3c8838f

Browse files
committed
Add support for UintSlice and Float64Slice flags
1 parent 2183a3c commit 3c8838f

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

viper.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,11 +1181,26 @@ func (v *Viper) find(lcaseKey string, flagDefault bool) any {
11811181
s = strings.TrimSuffix(s, "]")
11821182
res, _ := readAsCSV(s)
11831183
return res
1184+
case "boolSlice":
1185+
s := strings.TrimPrefix(flag.ValueString(), "[")
1186+
s = strings.TrimSuffix(s, "]")
1187+
res, _ := readAsCSV(s)
1188+
return cast.ToBoolSlice(res)
11841189
case "intSlice":
11851190
s := strings.TrimPrefix(flag.ValueString(), "[")
11861191
s = strings.TrimSuffix(s, "]")
11871192
res, _ := readAsCSV(s)
11881193
return cast.ToIntSlice(res)
1194+
case "uintSlice":
1195+
s := strings.TrimPrefix(flag.ValueString(), "[")
1196+
s = strings.TrimSuffix(s, "]")
1197+
res, _ := readAsCSV(s)
1198+
return cast.ToUintSlice(res)
1199+
case "float64Slice":
1200+
s := strings.TrimPrefix(flag.ValueString(), "[")
1201+
s = strings.TrimSuffix(s, "]")
1202+
res, _ := readAsCSV(s)
1203+
return cast.ToFloat64Slice(res)
11891204
case "durationSlice":
11901205
s := strings.TrimPrefix(flag.ValueString(), "[")
11911206
s = strings.TrimSuffix(s, "]")
@@ -1268,11 +1283,26 @@ func (v *Viper) find(lcaseKey string, flagDefault bool) any {
12681283
s = strings.TrimSuffix(s, "]")
12691284
res, _ := readAsCSV(s)
12701285
return res
1286+
case "boolSlice":
1287+
s := strings.TrimPrefix(flag.ValueString(), "[")
1288+
s = strings.TrimSuffix(s, "]")
1289+
res, _ := readAsCSV(s)
1290+
return cast.ToBoolSlice(res)
12711291
case "intSlice":
12721292
s := strings.TrimPrefix(flag.ValueString(), "[")
12731293
s = strings.TrimSuffix(s, "]")
12741294
res, _ := readAsCSV(s)
12751295
return cast.ToIntSlice(res)
1296+
case "uintSlice":
1297+
s := strings.TrimPrefix(flag.ValueString(), "[")
1298+
s = strings.TrimSuffix(s, "]")
1299+
res, _ := readAsCSV(s)
1300+
return cast.ToUintSlice(res)
1301+
case "float64Slice":
1302+
s := strings.TrimPrefix(flag.ValueString(), "[")
1303+
s = strings.TrimSuffix(s, "]")
1304+
res, _ := readAsCSV(s)
1305+
return cast.ToFloat64Slice(res)
12761306
case "stringToString":
12771307
return stringToStringConv(flag.ValueString())
12781308
case "stringToInt":

viper_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,29 @@ func TestBindPFlagsStringArray(t *testing.T) {
12101210
}
12111211
}
12121212

1213+
func TestBindPFlagsSlices(t *testing.T) {
1214+
set := pflag.NewFlagSet("test", pflag.ContinueOnError)
1215+
set.IntSlice("intslice", []int{}, "")
1216+
set.BoolSlice("boolslice", []bool{}, "")
1217+
set.Float64Slice("float64slice", []float64{}, "")
1218+
set.UintSlice("uintslice", []uint{}, "")
1219+
1220+
v := New()
1221+
v.BindPFlags(set)
1222+
1223+
set.Set("intslice", "1,2")
1224+
assert.Equal(t, []int{1, 2}, v.Get("intslice"))
1225+
1226+
set.Set("boolslice", "true,false")
1227+
assert.Equal(t, []bool{true, false}, v.Get("boolslice"))
1228+
1229+
set.Set("float64slice", "1.1,2.2")
1230+
assert.Equal(t, []float64{1.1, 2.2}, v.Get("float64slice"))
1231+
1232+
set.Set("uintslice", "1,2")
1233+
assert.Equal(t, []uint{1, 2}, v.Get("uintslice"))
1234+
}
1235+
12131236
func TestSliceFlagsReturnCorrectType(t *testing.T) {
12141237
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
12151238
flagSet.IntSlice("int", []int{1, 2}, "")

0 commit comments

Comments
 (0)