Added destination scan support for flags

This commit is contained in:
ston1th 2015-11-14 20:01:15 +01:00
parent 70e3fa51eb
commit bb7e45acf1

63
flag.go
View File

@ -237,9 +237,10 @@ func (f IntSliceFlag) getName() string {
// BoolFlag is a switch that defaults to false // BoolFlag is a switch that defaults to false
type BoolFlag struct { type BoolFlag struct {
Name string Name string
Usage string Usage string
EnvVar string EnvVar string
Destination *bool
} }
// String returns a readable representation of this value (for usage defaults) // String returns a readable representation of this value (for usage defaults)
@ -264,6 +265,10 @@ func (f BoolFlag) Apply(set *flag.FlagSet) {
} }
eachName(f.Name, func(name string) { eachName(f.Name, func(name string) {
if f.Destination != nil {
set.BoolVar(f.Destination, name, val, f.Usage)
return
}
set.Bool(name, val, f.Usage) set.Bool(name, val, f.Usage)
}) })
} }
@ -312,10 +317,11 @@ func (f BoolTFlag) getName() string {
// StringFlag represents a flag that takes as string value // StringFlag represents a flag that takes as string value
type StringFlag struct { type StringFlag struct {
Name string Name string
Value string Value string
Usage string Usage string
EnvVar string EnvVar string
Destination *string
} }
// String returns the usage // String returns the usage
@ -345,6 +351,10 @@ func (f StringFlag) Apply(set *flag.FlagSet) {
} }
eachName(f.Name, func(name string) { eachName(f.Name, func(name string) {
if f.Destination != nil {
set.StringVar(f.Destination, name, f.Value, f.Usage)
return
}
set.String(name, f.Value, f.Usage) set.String(name, f.Value, f.Usage)
}) })
} }
@ -356,10 +366,11 @@ func (f StringFlag) getName() string {
// IntFlag is a flag that takes an integer // IntFlag is a flag that takes an integer
// Errors if the value provided cannot be parsed // Errors if the value provided cannot be parsed
type IntFlag struct { type IntFlag struct {
Name string Name string
Value int Value int
Usage string Usage string
EnvVar string EnvVar string
Destination *int
} }
// String returns the usage // String returns the usage
@ -383,6 +394,10 @@ func (f IntFlag) Apply(set *flag.FlagSet) {
} }
eachName(f.Name, func(name string) { eachName(f.Name, func(name string) {
if f.Destination != nil {
set.IntVar(f.Destination, name, f.Value, f.Usage)
return
}
set.Int(name, f.Value, f.Usage) set.Int(name, f.Value, f.Usage)
}) })
} }
@ -394,10 +409,11 @@ func (f IntFlag) getName() string {
// DurationFlag is a flag that takes a duration specified in Go's duration // DurationFlag is a flag that takes a duration specified in Go's duration
// format: https://golang.org/pkg/time/#ParseDuration // format: https://golang.org/pkg/time/#ParseDuration
type DurationFlag struct { type DurationFlag struct {
Name string Name string
Value time.Duration Value time.Duration
Usage string Usage string
EnvVar string EnvVar string
Destination *time.Duration
} }
// String returns a readable representation of this value (for usage defaults) // String returns a readable representation of this value (for usage defaults)
@ -421,6 +437,10 @@ func (f DurationFlag) Apply(set *flag.FlagSet) {
} }
eachName(f.Name, func(name string) { eachName(f.Name, func(name string) {
if f.Destination != nil {
set.DurationVar(f.Destination, name, f.Value, f.Usage)
return
}
set.Duration(name, f.Value, f.Usage) set.Duration(name, f.Value, f.Usage)
}) })
} }
@ -432,10 +452,11 @@ func (f DurationFlag) getName() string {
// Float64Flag is a flag that takes an float value // Float64Flag is a flag that takes an float value
// Errors if the value provided cannot be parsed // Errors if the value provided cannot be parsed
type Float64Flag struct { type Float64Flag struct {
Name string Name string
Value float64 Value float64
Usage string Usage string
EnvVar string EnvVar string
Destination *float64
} }
// String returns the usage // String returns the usage
@ -458,6 +479,10 @@ func (f Float64Flag) Apply(set *flag.FlagSet) {
} }
eachName(f.Name, func(name string) { eachName(f.Name, func(name string) {
if f.Destination != nil {
set.Float64Var(f.Destination, name, f.Value, f.Usage)
return
}
set.Float64(name, f.Value, f.Usage) set.Float64(name, f.Value, f.Usage)
}) })
} }