backwards compatible RequiredFlag implementation

This commit is contained in:
Lynn Cyrin 2019-07-11 21:53:10 -07:00
parent 922d231891
commit 6a2ae78373
No known key found for this signature in database
GPG Key ID: EE9CCB427DFEC897
2 changed files with 14 additions and 5 deletions

View File

@ -301,10 +301,12 @@ func checkRequiredFlags(flags []Flag, set *flag.FlagSet) error {
})
for _, f := range flags {
if f.IsRequired() {
key := strings.Split(f.GetName(), ",")[0]
if !visited[key] {
return fmt.Errorf("Required flag %s not set", f.GetName())
if rf, ok := f.(RequiredFlag); ok {
if rf.IsRequired() {
key := strings.Split(f.GetName(), ",")[0]
if !visited[key] {
return fmt.Errorf("Required flag %s not set", f.GetName())
}
}
}
}

View File

@ -72,10 +72,17 @@ type Flag interface {
fmt.Stringer
// Apply Flag settings to the given flag set
Apply(*flag.FlagSet)
IsRequired() bool
GetName() string
}
// RequiredFlag is an interface that allows us to return mark flags as required
// it allows flags defined in this library to be marked as required in a backwards compatible fashion
type RequiredFlag interface {
Flag
IsRequired() bool
}
// errorableFlag is an interface that allows us to return errors during apply
// it allows flags defined in this library to return errors in a fashion backwards compatible
// TODO remove in v2 and modify the existing Flag interface to return errors