Skip to content

Commit 325b724

Browse files
committed
Add support for UintSlice and Float64Slice flags
1 parent 1508a7b commit 325b724

File tree

4 files changed

+56
-3
lines changed

4 files changed

+56
-3
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/pelletier/go-toml/v2 v2.2.3
99
github.com/sagikazarmark/locafero v0.8.0
1010
github.com/spf13/afero v1.14.0
11-
github.com/spf13/cast v1.7.1
11+
github.com/spf13/cast v1.8.0
1212
github.com/spf13/pflag v1.0.6
1313
github.com/stretchr/testify v1.10.0
1414
github.com/subosito/gotenv v1.6.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9yS
2525
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
2626
github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA=
2727
github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo=
28-
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
29-
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
28+
github.com/spf13/cast v1.8.0 h1:gEN9K4b8Xws4EX0+a0reLmhq8moKn7ntRlQYgjPeCDk=
29+
github.com/spf13/cast v1.8.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
3030
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
3131
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
3232
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=

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)