diff --git a/context.go b/context.go index c9a32ff..8746d68 100644 --- a/context.go +++ b/context.go @@ -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()) + } } } } diff --git a/flag.go b/flag.go index 0252ba2..71fd729 100644 --- a/flag.go +++ b/flag.go @@ -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