From 36fcbe4a76934a3fee401189b44466febcaaa944 Mon Sep 17 00:00:00 2001 From: filifa Date: Sun, 28 Jul 2024 19:49:10 -0500 Subject: [PATCH] display valid flag values on error --- cmd/leagueflag.go | 4 +++- cmd/schedule.go | 4 ++-- cmd/teamflag.go | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/cmd/leagueflag.go b/cmd/leagueflag.go index 6d3964f..de4b1ea 100644 --- a/cmd/leagueflag.go +++ b/cmd/leagueflag.go @@ -55,7 +55,9 @@ func (t *leagueFlag) Set(v string) error { _, ok := leagueIDs[v] if !ok { - err = errors.New("invalid league ID") + allowed := allowedFlags(leagueIDs) + allowedList := strings.Join(allowed, ", ") + err = errors.New("league must be one of " + allowedList) } else { *t = leagueFlag(v) } diff --git a/cmd/schedule.go b/cmd/schedule.go index b269273..f8e88b7 100644 --- a/cmd/schedule.go +++ b/cmd/schedule.go @@ -93,7 +93,7 @@ func init() { // Cobra supports local flags which will only run when this command // is called directly, e.g.: - scheduleCmd.Flags().VarP(&team, "team", "t", "team to get schedule for (atl, az, bal, bos, chc, cin, cle, col, cws, det, hou, kc, laa, lad, mia, mil, min, nym, nyy, oak, phi, pit, sd, sea, sf, stl, tb, tex, tor, wsh)") + scheduleCmd.Flags().VarP(&team, "team", "t", "team to get schedule for") scheduleCmd.Flags().StringVarP(&date, "date", "d", "", "date to get schedule for (YYYY-MM-DD)") - scheduleCmd.Flags().StringVarP(&sport, "sport", "s", "mlb", "sport to get schedule for (default: MLB)") + scheduleCmd.Flags().StringVarP(&sport, "sport", "s", "mlb", "sport to get schedule for") } diff --git a/cmd/teamflag.go b/cmd/teamflag.go index ba00b5a..aa8e32b 100644 --- a/cmd/teamflag.go +++ b/cmd/teamflag.go @@ -55,6 +55,18 @@ var teamIDs = map[string]statsapi.TeamID{ "mil": statsapi.MIL, } +func allowedFlags[V any](m map[string]V) []string { + keys := make([]string, len(m)) + + i := 0 + for k := range m { + keys[i] = k + i++ + } + + return keys +} + type teamFlag string func (t *teamFlag) String() string { @@ -72,7 +84,9 @@ func (t *teamFlag) Set(v string) error { _, ok := teamIDs[v] if !ok { - err = errors.New("invalid team ID") + allowed := allowedFlags(teamIDs) + allowedList := strings.Join(allowed, ", ") + err = errors.New("team must be one of " + allowedList) } else { *t = teamFlag(v) }