refactor flag set methods

This commit is contained in:
filifa 2024-07-28 23:32:50 -05:00
parent adc8177a9b
commit b97e95827c
4 changed files with 28 additions and 28 deletions

View File

@ -33,8 +33,14 @@ func keys[V any](m map[string]V) []string {
return keys return keys
} }
func flagValueError(allowed []string) error { func validateFlag[V any](v string, m map[string]V) error {
var err error
_, ok := m[v]
if !ok {
allowed := keys(m)
sort.Strings(allowed) sort.Strings(allowed)
allowedList := strings.Join(allowed, ", ") allowedList := strings.Join(allowed, ", ")
return errors.New("must be one of " + allowedList) err = errors.New("must be one of " + allowedList)
}
return err
} }

View File

@ -44,19 +44,17 @@ func (t *leagueFlag) String() string {
} }
func (t *leagueFlag) Set(v string) error { func (t *leagueFlag) Set(v string) error {
var err error
v = strings.ToLower(v) v = strings.ToLower(v)
_, ok := leagueIDs[v] err := validateFlag(v, leagueIDs)
if !ok { if err != nil {
allowed := keys(leagueIDs)
err = flagValueError(allowed)
} else {
*t = leagueFlag(v)
}
return err return err
} }
*t = leagueFlag(v)
return nil
}
func (t *leagueFlag) Type() string { func (t *leagueFlag) Type() string {
return "leagueFlag" return "leagueFlag"
} }

View File

@ -49,19 +49,17 @@ func (t *sportFlag) String() string {
} }
func (t *sportFlag) Set(v string) error { func (t *sportFlag) Set(v string) error {
var err error
v = strings.ToLower(v) v = strings.ToLower(v)
_, ok := sportIDs[v] err := validateFlag(v, sportIDs)
if !ok { if err != nil {
allowed := keys(sportIDs)
err = flagValueError(allowed)
} else {
*t = sportFlag(v)
}
return err return err
} }
*t = sportFlag(v)
return nil
}
func (t *sportFlag) Type() string { func (t *sportFlag) Type() string {
return "sportFlag" return "sportFlag"
} }

View File

@ -61,19 +61,17 @@ func (t *teamFlag) String() string {
} }
func (t *teamFlag) Set(v string) error { func (t *teamFlag) Set(v string) error {
var err error
v = strings.ToLower(v) v = strings.ToLower(v)
_, ok := teamIDs[v] err := validateFlag(v, teamIDs)
if !ok { if err != nil {
allowed := keys(teamIDs)
err = flagValueError(allowed)
} else {
*t = teamFlag(v)
}
return err return err
} }
*t = teamFlag(v)
return nil
}
func (t *teamFlag) Type() string { func (t *teamFlag) Type() string {
return "teamFlag" return "teamFlag"
} }