Skip to content

Commit 98eb9e4

Browse files
committed
refactor: merge getIntSlice and getFloatSlice
1 parent 56720b2 commit 98eb9e4

File tree

4 files changed

+68
-30
lines changed

4 files changed

+68
-30
lines changed

flag_float_slice.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,17 @@ var (
1818
// FloatSlice looks up the value of a local FloatSliceFlag, returns
1919
// nil if not found
2020
func (cmd *Command) FloatSlice(name string) []float64 {
21-
return getFloatSlice[float64](cmd, name)
21+
return getNumberSlice[float64](cmd, name)
2222
}
2323

2424
// Float32Slice looks up the value of a local Float32Slice, returns
2525
// nil if not found
2626
func (cmd *Command) Float32Slice(name string) []float32 {
27-
return getFloatSlice[float32](cmd, name)
27+
return getNumberSlice[float32](cmd, name)
2828
}
2929

3030
// Float64Slice looks up the value of a local Float64SliceFlag, returns
3131
// nil if not found
3232
func (cmd *Command) Float64Slice(name string) []float64 {
33-
return getFloatSlice[float64](cmd, name)
34-
}
35-
36-
func getFloatSlice[T float32 | float64](cmd *Command, name string) []T {
37-
if v, ok := cmd.Value(name).([]T); ok {
38-
tracef("float slice available for flag name %[1]q with value=%[2]v (cmd=%[3]q)", name, v, cmd.Name)
39-
40-
return v
41-
}
42-
43-
tracef("float slice NOT available for flag name %[1]q (cmd=%[2]q)", name, cmd.Name)
44-
return nil
33+
return getNumberSlice[float64](cmd, name)
4534
}

flag_int_slice.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,29 @@ var (
2424
// IntSlice looks up the value of a local IntSliceFlag, returns
2525
// nil if not found
2626
func (cmd *Command) IntSlice(name string) []int {
27-
return getIntSlice[int](cmd, name)
27+
return getNumberSlice[int](cmd, name)
2828
}
2929

3030
// Int8Slice looks up the value of a local Int8SliceFlag, returns
3131
// nil if not found
3232
func (cmd *Command) Int8Slice(name string) []int8 {
33-
return getIntSlice[int8](cmd, name)
33+
return getNumberSlice[int8](cmd, name)
3434
}
3535

3636
// Int16Slice looks up the value of a local Int16SliceFlag, returns
3737
// nil if not found
3838
func (cmd *Command) Int16Slice(name string) []int16 {
39-
return getIntSlice[int16](cmd, name)
39+
return getNumberSlice[int16](cmd, name)
4040
}
4141

4242
// Int32Slice looks up the value of a local Int32SliceFlag, returns
4343
// nil if not found
4444
func (cmd *Command) Int32Slice(name string) []int32 {
45-
return getIntSlice[int32](cmd, name)
45+
return getNumberSlice[int32](cmd, name)
4646
}
4747

4848
// Int64Slice looks up the value of a local Int64SliceFlag, returns
4949
// nil if not found
5050
func (cmd *Command) Int64Slice(name string) []int64 {
51-
return getIntSlice[int64](cmd, name)
52-
}
53-
54-
func getIntSlice[T int | int8 | int16 | int32 | int64](cmd *Command, name string) []T {
55-
if v, ok := cmd.Value(name).([]T); ok {
56-
tracef("int slice available for flag name %[1]q with value=%[2]v (cmd=%[3]q)", name, v, cmd.Name)
57-
58-
return v
59-
}
60-
61-
tracef("int slice NOT available for flag name %[1]q (cmd=%[2]q)", name, cmd.Name)
62-
return nil
51+
return getNumberSlice[int64](cmd, name)
6352
}

flag_number_slice.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cli
2+
3+
type numberType interface {
4+
int | int8 | int16 | int32 | int64 | float32 | float64
5+
}
6+
7+
func getNumberSlice[T numberType](cmd *Command, name string) []T {
8+
if v, ok := cmd.Value(name).([]T); ok {
9+
tracef("%T slice available for flag name %[1]q with value=%[2]v (cmd=%[3]q)", *new(T), name, v, cmd.Name)
10+
return v
11+
}
12+
13+
tracef("%T slice NOT available for flag name %[1]q (cmd=%[2]q)", *new(T), name, cmd.Name)
14+
return nil
15+
}

flag_number_slice_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package cli
2+
3+
import (
4+
"io"
5+
"testing"
6+
7+
"github.com/stretchr/testify/assert"
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func Test_getNumberSlice_int64(t *testing.T) {
12+
f := &Int64SliceFlag{Name: "numbers"}
13+
14+
cmd := &Command{
15+
Name: "mock",
16+
Flags: []Flag{f},
17+
Writer: io.Discard,
18+
ErrWriter: io.Discard,
19+
}
20+
21+
err := f.Set("", "1,2,3")
22+
require.NoError(t, err)
23+
24+
expected := []int64{1, 2, 3}
25+
26+
assert.Equal(t, expected, getNumberSlice[int64](cmd, "numbers"))
27+
}
28+
29+
func Test_getNumberSlice_float64(t *testing.T) {
30+
f := &Float64SliceFlag{Name: "numbers"}
31+
32+
cmd := &Command{
33+
Name: "mock",
34+
Flags: []Flag{f},
35+
Writer: io.Discard,
36+
ErrWriter: io.Discard,
37+
}
38+
39+
err := f.Set("", "1,2,3")
40+
require.NoError(t, err)
41+
42+
expected := []float64{1, 2, 3}
43+
44+
assert.Equal(t, expected, getNumberSlice[float64](cmd, "numbers"))
45+
}

0 commit comments

Comments
 (0)