-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptions.go
46 lines (40 loc) · 1015 Bytes
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package argsx
type options[T any] struct {
delimiter string
defaultV []T
}
type Option[T any] func(*options[T])
// getOpts parse option the default delimiter is ,
func getOpts[T any](opts []Option[T]) *options[T] {
op := &options[T]{delimiter: ","}
for _, opt := range opts {
opt(op)
}
return op
}
// getDefault get the default value of T type
func (opts options[T]) getDefault() (t [][]T) {
if opts.defaultV == nil {
return
}
list := make([][]T, 0)
return append(list, opts.defaultV)
}
// WithDelimiter specify slice delimiter default is ","
//
// WithDelimiter[string]("-")
// WithDelimiter[float64](".")
func WithDelimiter[T any](delimiter string) Option[T] {
return func(opts *options[T]) {
opts.delimiter = delimiter
}
}
// WithDefault specify slice default value if payload is empty
//
// WithDefault[string]("First", "Second")
// WithDefault[float32](float32(1.2), float32(3.4))
func WithDefault[T any](dv ...T) Option[T] {
return func(opts *options[T]) {
opts.defaultV = dv
}
}