File: errors.go

package info (click to toggle)
golang-github-spf13-pflag 1.0.10-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid
  • size: 612 kB
  • sloc: sh: 80; makefile: 2
file content (149 lines) | stat: -rw-r--r-- 4,360 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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
}