Add countable interface

This commit is contained in:
Naveen Gogineni 2022-09-05 19:13:26 -04:00
parent 15fd35e7b4
commit dbdf119742
4 changed files with 23 additions and 6 deletions

View File

@ -105,13 +105,11 @@ func (cCtx *Context) Lineage() []*Context {
return lineage return lineage
} }
// NumOccurrences returns the num of occurences of this flag // Count returns the num of occurences of this flag
func (cCtx *Context) Count(name string) int { func (cCtx *Context) Count(name string) int {
if fs := cCtx.lookupFlagSet(name); fs != nil { if fs := cCtx.lookupFlagSet(name); fs != nil {
if bf, ok := fs.Lookup(name).Value.(*boolValue); ok { if cf, ok := fs.Lookup(name).Value.(Countable); ok {
if bf.count != nil { return cf.Count()
return *bf.count
}
} }
} }
return 0 return 0

View File

@ -139,6 +139,12 @@ type CategorizableFlag interface {
GetCategory() string GetCategory() string
} }
// Countable is an interface to enable detection of flag values which support
// repetitive flags
type Countable interface {
Count() int
}
func flagSet(name string, flags []Flag) (*flag.FlagSet, error) { func flagSet(name string, flags []Flag) (*flag.FlagSet, error) {
set := flag.NewFlagSet(name, flag.ContinueOnError) set := flag.NewFlagSet(name, flag.ContinueOnError)

View File

@ -51,6 +51,13 @@ func (b *boolValue) String() string {
func (b *boolValue) IsBoolFlag() bool { return true } func (b *boolValue) IsBoolFlag() bool { return true }
func (b *boolValue) Count() int {
if b.count != nil {
return *b.count
}
return 0
}
// TakesValue returns true of the flag takes a value, otherwise false // TakesValue returns true of the flag takes a value, otherwise false
func (f *BoolFlag) TakesValue() bool { func (f *BoolFlag) TakesValue() bool {
return false return false

View File

@ -634,7 +634,7 @@ func (cCtx *Context) Bool(name string) bool
Bool looks up the value of a local BoolFlag, returns false if not found Bool looks up the value of a local BoolFlag, returns false if not found
func (cCtx *Context) Count(name string) int func (cCtx *Context) Count(name string) int
NumOccurrences returns the num of occurences of this flag Count returns the num of occurences of this flag
func (cCtx *Context) Duration(name string) time.Duration func (cCtx *Context) Duration(name string) time.Duration
Duration looks up the value of a local DurationFlag, returns 0 if not found Duration looks up the value of a local DurationFlag, returns 0 if not found
@ -708,6 +708,12 @@ func (cCtx *Context) Uint64(name string) uint64
func (cCtx *Context) Value(name string) interface{} func (cCtx *Context) Value(name string) interface{}
Value returns the value of the flag corresponding to `name` Value returns the value of the flag corresponding to `name`
type Countable interface {
Count() int
}
Countable is an interface to enable detection of flag values which support
repetitive flags
type DocGenerationFlag interface { type DocGenerationFlag interface {
Flag Flag