mirror of
https://github.com/spf13/viper
synced 2025-06-05 10:57:17 +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, "]")
|
||||
res, _ := readAsCSV(s)
|
||||
return res
|
||||
case "boolSlice":
|
||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||
s = strings.TrimSuffix(s, "]")
|
||||
res, _ := readAsCSV(s)
|
||||
return cast.ToBoolSlice(res)
|
||||
case "intSlice":
|
||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||
s = strings.TrimSuffix(s, "]")
|
||||
res, _ := readAsCSV(s)
|
||||
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":
|
||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||
s = strings.TrimSuffix(s, "]")
|
||||
|
@ -1268,11 +1283,26 @@ func (v *Viper) find(lcaseKey string, flagDefault bool) any {
|
|||
s = strings.TrimSuffix(s, "]")
|
||||
res, _ := readAsCSV(s)
|
||||
return res
|
||||
case "boolSlice":
|
||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||
s = strings.TrimSuffix(s, "]")
|
||||
res, _ := readAsCSV(s)
|
||||
return cast.ToBoolSlice(res)
|
||||
case "intSlice":
|
||||
s := strings.TrimPrefix(flag.ValueString(), "[")
|
||||
s = strings.TrimSuffix(s, "]")
|
||||
res, _ := readAsCSV(s)
|
||||
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":
|
||||
return stringToStringConv(flag.ValueString())
|
||||
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) {
|
||||
flagSet := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
||||
flagSet.IntSlice("int", []int{1, 2}, "")
|
||||
|
|
Loading…
Add table
Reference in a new issue