github.com/Redstoneguy129/cli@v0.0.0-20230211220159-15dca4e91917/internal/utils/enum.go (about) 1 package utils 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 // Ref: https://github.com/spf13/pflag/issues/236#issuecomment-931600452 9 type EnumFlag struct { 10 Allowed []string 11 Value string 12 } 13 14 func (a EnumFlag) String() string { 15 return a.Value 16 } 17 18 func (a *EnumFlag) Set(p string) error { 19 isIncluded := func(opts []string, val string) bool { 20 for _, opt := range opts { 21 if val == opt { 22 return true 23 } 24 } 25 return false 26 } 27 if !isIncluded(a.Allowed, p) { 28 return fmt.Errorf("must be one of [ %s ]", strings.Join(a.Allowed, " | ")) 29 } 30 a.Value = p 31 return nil 32 } 33 34 func (a *EnumFlag) Type() string { 35 values := strings.Join(a.Allowed, " | ") 36 if len(values) < 40 { 37 return fmt.Sprintf("[ %s ]", values) 38 } 39 return "string" 40 }