61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
package flaghelper
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// StringFlag implements the flag.Value interface and allows multiple
|
|
// calls to the same variable to append a list.
|
|
type StringFlag []string
|
|
|
|
func (s *StringFlag) String() string {
|
|
return strings.Join(*s, ",")
|
|
}
|
|
|
|
func (s *StringFlag) Set(value string) error {
|
|
*s = append(*s, value)
|
|
return nil
|
|
}
|
|
|
|
// FuncVar is a type of flag that accepts a function that is the string
|
|
// given
|
|
// by the user.
|
|
type FuncVar func(s string) error
|
|
|
|
func (f FuncVar) Set(s string) error { return f(s) }
|
|
func (f FuncVar) String() string { return "" }
|
|
func (f FuncVar) IsBoolFlag() bool { return false }
|
|
|
|
// FuncBoolVar is a type of flag that accepts a function, converts the
|
|
// user's
|
|
// value to a bool, and then calls the given function.
|
|
type FuncBoolVar func(b bool) error
|
|
|
|
func (f FuncBoolVar) Set(s string) error {
|
|
v, err := strconv.ParseBool(s)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return f(v)
|
|
}
|
|
func (f FuncBoolVar) String() string { return "" }
|
|
func (f FuncBoolVar) IsBoolFlag() bool { return true }
|
|
|
|
// FuncDurationVar is a type of flag that
|
|
// accepts a function, converts the
|
|
// user's value to a duration, and then
|
|
// calls the given function.
|
|
type FuncDurationVar func(d time.Duration) error
|
|
|
|
func (f FuncDurationVar) Set(s string) error {
|
|
v, err := time.ParseDuration(s)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return f(v)
|
|
}
|
|
func (f FuncDurationVar) String() string { return "" }
|
|
func (f FuncDurationVar) IsBoolFlag() bool { return false }
|