change RequiredFlagsErr to RequiredFlagErr, update to struct for custom message

This commit is contained in:
Aaron Berns 2019-08-20 14:50:57 -04:00
parent fffdd82c00
commit eb1734ba59
3 changed files with 256 additions and 165 deletions

View File

@ -310,15 +310,23 @@ func (e *errRequiredFlags) Error() string {
var allErrors []string
numberOfMissingFlags := len(missingFlagNames)
numberOfMissingReqErrFlags := len(missingFlagNamesReqErr)
if numberOfMissingFlags > 0 {
if numberOfMissingFlags == 1 {
allErrors = append(allErrors, fmt.Sprintf("Required flag %q not set", missingFlagNames[0]))
} else {
joinedMissingFlags := strings.Join(missingFlagNames, ", ")
allErrors = append(allErrors, fmt.Sprintf("Required flags %q not set", joinedMissingFlags))
}
}
if numberOfMissingReqErrFlags > 0 {
// handle user defined errors and append
}
return strings.Join(allErrors, "\n")
}

View File

@ -85,10 +85,12 @@ type RequiredFlag interface {
// RequiredFlagsErr is an interface that allows users to redefine errors on required flags
// it allows flags with user-defined errors to be backwards compatible with the Flag interface
type RequiredFlagsErr interface {
type RequiredFlagErr interface {
Flag
FlagsErrRequired() bool
IsCustom() bool
GetMessage() string
HasInterpolation() bool
}
// DocGenerationFlag is an interface that allows documentation generation for the flag

View File

@ -9,6 +9,12 @@ import (
"time"
)
type FlagErr struct {
Custom bool
Message string
Interpolate bool
}
// BoolFlag is a flag with type bool
type BoolFlag struct {
Name string
@ -16,7 +22,7 @@ type BoolFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Destination *bool
@ -38,9 +44,14 @@ func (f BoolFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f BoolFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f BoolFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f BoolFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -93,7 +104,7 @@ type BoolTFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Destination *bool
@ -115,6 +126,16 @@ func (f BoolTFlag) IsRequired() bool {
return f.Required
}
// IsCustom returns whether or not the required flag has a custom errorj
func (f BoolTFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f BoolTFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// FlagsErrRequired returns whether or not the flag is required
func (f BoolTFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
@ -170,7 +191,7 @@ type DurationFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value time.Duration
@ -193,6 +214,16 @@ func (f DurationFlag) IsRequired() bool {
return f.Required
}
// IsCustom returns whether or not the required flag has a custom errorj
func (f DurationFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f DurationFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// FlagsErrRequired returns whether or not the flag is required
func (f DurationFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
@ -248,7 +279,7 @@ type Float64Flag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value float64
@ -271,9 +302,14 @@ func (f Float64Flag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f Float64Flag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f Float64Flag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f Float64Flag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -326,7 +362,7 @@ type GenericFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value Generic
@ -348,9 +384,14 @@ func (f GenericFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f GenericFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f GenericFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f GenericFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -406,7 +447,7 @@ type Int64Flag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value int64
@ -429,9 +470,14 @@ func (f Int64Flag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f Int64Flag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f Int64Flag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f Int64Flag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -484,7 +530,7 @@ type IntFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value int
@ -507,9 +553,14 @@ func (f IntFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f IntFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f IntFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f IntFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -562,7 +613,7 @@ type IntSliceFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value *IntSlice
@ -584,9 +635,14 @@ func (f IntSliceFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f IntSliceFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f IntSliceFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f IntSliceFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -642,7 +698,7 @@ type Int64SliceFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value *Int64Slice
@ -664,9 +720,14 @@ func (f Int64SliceFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f Int64SliceFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f Int64SliceFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f Int64SliceFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -722,7 +783,7 @@ type StringFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value string
@ -745,9 +806,14 @@ func (f StringFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f StringFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f StringFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f StringFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -800,7 +866,7 @@ type StringSliceFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value *StringSlice
@ -822,9 +888,14 @@ func (f StringSliceFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f StringSliceFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f StringSliceFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f StringSliceFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -880,7 +951,7 @@ type Uint64Flag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value uint64
@ -903,9 +974,14 @@ func (f Uint64Flag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f Uint64Flag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f Uint64Flag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f Uint64Flag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false
@ -958,7 +1034,7 @@ type UintFlag struct {
EnvVar string
FilePath string
Required bool
RequiredFlagsErr bool
RequiredFlagErr FlagErr
Hidden bool
TakesFile bool
Value uint
@ -981,9 +1057,14 @@ func (f UintFlag) IsRequired() bool {
return f.Required
}
// FlagsErrRequired returns whether or not the flag is required
func (f UintFlag) FlagsErrRequired() bool {
return f.RequiredFlagsErr
// IsCustom returns whether or not the required flag has a custom errorj
func (f UintFlag) IsCustom() bool {
return f.RequiredFlagErr.Custom
}
// GetMessage returns the custom error message
func (f UintFlag) GetMessage() string {
return f.RequiredFlagErr.Message
}
// TakesValue returns true of the flag takes a value, otherwise false