| package pflag |
| |
| import "fmt" |
| |
| // notExistErrorMessageType specifies which flavor of "flag does not exist" |
| // is printed by NotExistError. This allows the related errors to be grouped |
| // under a single NotExistError struct without making a breaking change to |
| // the error message text. |
| type notExistErrorMessageType int |
| |
| const ( |
| flagNotExistMessage notExistErrorMessageType = iota |
| flagNotDefinedMessage |
| flagNoSuchFlagMessage |
| flagUnknownFlagMessage |
| flagUnknownShorthandFlagMessage |
| ) |
| |
| // NotExistError is the error returned when trying to access a flag that |
| // does not exist in the FlagSet. |
| type NotExistError struct { |
| name string |
| specifiedShorthands string |
| messageType notExistErrorMessageType |
| } |
| |
| // Error implements error. |
| func (e *NotExistError) Error() string { |
| switch e.messageType { |
| case flagNotExistMessage: |
| return fmt.Sprintf("flag %q does not exist", e.name) |
| |
| case flagNotDefinedMessage: |
| return fmt.Sprintf("flag accessed but not defined: %s", e.name) |
| |
| case flagNoSuchFlagMessage: |
| return fmt.Sprintf("no such flag -%v", e.name) |
| |
| case flagUnknownFlagMessage: |
| return fmt.Sprintf("unknown flag: --%s", e.name) |
| |
| case flagUnknownShorthandFlagMessage: |
| c := rune(e.name[0]) |
| return fmt.Sprintf("unknown shorthand flag: %q in -%s", c, e.specifiedShorthands) |
| } |
| |
| panic(fmt.Errorf("unknown flagNotExistErrorMessageType: %v", e.messageType)) |
| } |
| |
| // GetSpecifiedName returns the name of the flag (without dashes) as it |
| // appeared in the parsed arguments. |
| func (e *NotExistError) GetSpecifiedName() string { |
| return e.name |
| } |
| |
| // GetSpecifiedShortnames returns the group of shorthand arguments |
| // (without dashes) that the flag appeared within. If the flag was not in a |
| // shorthand group, this will return an empty string. |
| func (e *NotExistError) GetSpecifiedShortnames() string { |
| return e.specifiedShorthands |
| } |
| |
| // ValueRequiredError is the error returned when a flag needs an argument but |
| // no argument was provided. |
| type ValueRequiredError struct { |
| flag *Flag |
| specifiedName string |
| specifiedShorthands string |
| } |
| |
| // Error implements error. |
| func (e *ValueRequiredError) Error() string { |
| if len(e.specifiedShorthands) > 0 { |
| c := rune(e.specifiedName[0]) |
| return fmt.Sprintf("flag needs an argument: %q in -%s", c, e.specifiedShorthands) |
| } |
| |
| return fmt.Sprintf("flag needs an argument: --%s", e.specifiedName) |
| } |
| |
| // GetFlag returns the flag for which the error occurred. |
| func (e *ValueRequiredError) GetFlag() *Flag { |
| return e.flag |
| } |
| |
| // GetSpecifiedName returns the name of the flag (without dashes) as it |
| // appeared in the parsed arguments. |
| func (e *ValueRequiredError) GetSpecifiedName() string { |
| return e.specifiedName |
| } |
| |
| // GetSpecifiedShortnames returns the group of shorthand arguments |
| // (without dashes) that the flag appeared within. If the flag was not in a |
| // shorthand group, this will return an empty string. |
| func (e *ValueRequiredError) GetSpecifiedShortnames() string { |
| return e.specifiedShorthands |
| } |
| |
| // InvalidValueError is the error returned when an invalid value is used |
| // for a flag. |
| type InvalidValueError struct { |
| flag *Flag |
| value string |
| cause error |
| } |
| |
| // Error implements error. |
| func (e *InvalidValueError) Error() string { |
| flag := e.flag |
| var flagName string |
| if flag.Shorthand != "" && flag.ShorthandDeprecated == "" { |
| flagName = fmt.Sprintf("-%s, --%s", flag.Shorthand, flag.Name) |
| } else { |
| flagName = fmt.Sprintf("--%s", flag.Name) |
| } |
| return fmt.Sprintf("invalid argument %q for %q flag: %v", e.value, flagName, e.cause) |
| } |
| |
| // Unwrap implements errors.Unwrap. |
| func (e *InvalidValueError) Unwrap() error { |
| return e.cause |
| } |
| |
| // GetFlag returns the flag for which the error occurred. |
| func (e *InvalidValueError) GetFlag() *Flag { |
| return e.flag |
| } |
| |
| // GetValue returns the invalid value that was provided. |
| func (e *InvalidValueError) GetValue() string { |
| return e.value |
| } |
| |
| // InvalidSyntaxError is the error returned when a bad flag name is passed on |
| // the command line. |
| type InvalidSyntaxError struct { |
| specifiedFlag string |
| } |
| |
| // Error implements error. |
| func (e *InvalidSyntaxError) Error() string { |
| return fmt.Sprintf("bad flag syntax: %s", e.specifiedFlag) |
| } |
| |
| // GetSpecifiedName returns the exact flag (with dashes) as it |
| // appeared in the parsed arguments. |
| func (e *InvalidSyntaxError) GetSpecifiedFlag() string { |
| return e.specifiedFlag |
| } |