mirror of
https://github.com/spf13/viper
synced 2025-06-07 03:37:24 +00:00
Add support for UintSlice and Float64Slice flags
This commit is contained in:
parent
7328d1b53a
commit
260b8e9a3c
2 changed files with 53 additions and 0 deletions
30
viper.go
30
viper.go
|
@ -1181,11 +1181,26 @@ func (v *Viper) find(lcaseKey string, flagDefault bool) any {
|
||||||
s = strings.TrimSuffix(s, "]")
|
s = strings.TrimSuffix(s, "]")
|
||||||
res, _ := readAsCSV(s)
|
res, _ := readAsCSV(s)
|
||||||
return res
|
return res
|
||||||
|
case "boolSlice":
|
||||||
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
|
s = strings.TrimSuffix(s, "]")
|
||||||
|
res, _ := readAsCSV(s)
|
||||||
|
return cast.ToBoolSlice(res)
|
||||||
case "intSlice":
|
case "intSlice":
|
||||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
s = strings.TrimSuffix(s, "]")
|
s = strings.TrimSuffix(s, "]")
|
||||||
res, _ := readAsCSV(s)
|
res, _ := readAsCSV(s)
|
||||||
return cast.ToIntSlice(res)
|
return cast.ToIntSlice(res)
|
||||||
|
case "uintSlice":
|
||||||
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
|
s = strings.TrimSuffix(s, "]")
|
||||||
|
res, _ := readAsCSV(s)
|
||||||
|
return cast.ToUintSlice(res)
|
||||||
|
case "float64Slice":
|
||||||
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
|
s = strings.TrimSuffix(s, "]")
|
||||||
|
res, _ := readAsCSV(s)
|
||||||
|
return cast.ToFloat64Slice(res)
|
||||||
case "durationSlice":
|
case "durationSlice":
|
||||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
s = strings.TrimSuffix(s, "]")
|
s = strings.TrimSuffix(s, "]")
|
||||||
|
@ -1268,11 +1283,26 @@ func (v *Viper) find(lcaseKey string, flagDefault bool) any {
|
||||||
s = strings.TrimSuffix(s, "]")
|
s = strings.TrimSuffix(s, "]")
|
||||||
res, _ := readAsCSV(s)
|
res, _ := readAsCSV(s)
|
||||||
return res
|
return res
|
||||||
|
case "boolSlice":
|
||||||
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
|
s = strings.TrimSuffix(s, "]")
|
||||||
|
res, _ := readAsCSV(s)
|
||||||
|
return cast.ToBoolSlice(res)
|
||||||
case "intSlice":
|
case "intSlice":
|
||||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
s = strings.TrimSuffix(s, "]")
|
s = strings.TrimSuffix(s, "]")
|
||||||
res, _ := readAsCSV(s)
|
res, _ := readAsCSV(s)
|
||||||
return cast.ToIntSlice(res)
|
return cast.ToIntSlice(res)
|
||||||
|
case "uintSlice":
|
||||||
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
|
s = strings.TrimSuffix(s, "]")
|
||||||
|
res, _ := readAsCSV(s)
|
||||||
|
return cast.ToUintSlice(res)
|
||||||
|
case "float64Slice":
|
||||||
|
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||||
|
s = strings.TrimSuffix(s, "]")
|
||||||
|
res, _ := readAsCSV(s)
|
||||||
|
return cast.ToFloat64Slice(res)
|
||||||
case "stringToString":
|
case "stringToString":
|
||||||
return stringToStringConv(flag.ValueString())
|
return stringToStringConv(flag.ValueString())
|
||||||
case "stringToInt":
|
case "stringToInt":
|
||||||
|
|
|
@ -1210,6 +1210,29 @@ func TestBindPFlagsStringArray(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBindPFlagsSlices(t *testing.T) {
|
||||||
|
set := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
||||||
|
set.IntSlice("intslice", []int{}, "")
|
||||||
|
set.BoolSlice("boolslice", []bool{}, "")
|
||||||
|
set.Float64Slice("float64slice", []float64{}, "")
|
||||||
|
set.UintSlice("uintslice", []uint{}, "")
|
||||||
|
|
||||||
|
v := New()
|
||||||
|
v.BindPFlags(set)
|
||||||
|
|
||||||
|
set.Set("intslice", "1,2")
|
||||||
|
assert.Equal(t, []int{1, 2}, v.Get("intslice"))
|
||||||
|
|
||||||
|
set.Set("boolslice", "true,false")
|
||||||
|
assert.Equal(t, []bool{true, false}, v.Get("boolslice"))
|
||||||
|
|
||||||
|
set.Set("float64slice", "1.1,2.2")
|
||||||
|
assert.Equal(t, []float64{1.1, 2.2}, v.Get("float64slice"))
|
||||||
|
|
||||||
|
set.Set("uintslice", "1,2")
|
||||||
|
assert.Equal(t, []uint{1, 2}, v.Get("uintslice"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestSliceFlagsReturnCorrectType(t *testing.T) {
|
func TestSliceFlagsReturnCorrectType(t *testing.T) {
|
||||||
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
||||||
flagSet.IntSlice("int", []int{1, 2}, "")
|
flagSet.IntSlice("int", []int{1, 2}, "")
|
||||||
|
|
Loading…
Add table
Reference in a new issue