podman

Форк
0
209 строк · 7.0 Кб
1
package pflag
2

3
import (
4
	"encoding/base64"
5
	"encoding/hex"
6
	"fmt"
7
	"strings"
8
)
9

10
// BytesHex adapts []byte for use as a flag. Value of flag is HEX encoded
11
type bytesHexValue []byte
12

13
// String implements pflag.Value.String.
14
func (bytesHex bytesHexValue) String() string {
15
	return fmt.Sprintf("%X", []byte(bytesHex))
16
}
17

18
// Set implements pflag.Value.Set.
19
func (bytesHex *bytesHexValue) Set(value string) error {
20
	bin, err := hex.DecodeString(strings.TrimSpace(value))
21

22
	if err != nil {
23
		return err
24
	}
25

26
	*bytesHex = bin
27

28
	return nil
29
}
30

31
// Type implements pflag.Value.Type.
32
func (*bytesHexValue) Type() string {
33
	return "bytesHex"
34
}
35

36
func newBytesHexValue(val []byte, p *[]byte) *bytesHexValue {
37
	*p = val
38
	return (*bytesHexValue)(p)
39
}
40

41
func bytesHexConv(sval string) (interface{}, error) {
42

43
	bin, err := hex.DecodeString(sval)
44

45
	if err == nil {
46
		return bin, nil
47
	}
48

49
	return nil, fmt.Errorf("invalid string being converted to Bytes: %s %s", sval, err)
50
}
51

52
// GetBytesHex return the []byte value of a flag with the given name
53
func (f *FlagSet) GetBytesHex(name string) ([]byte, error) {
54
	val, err := f.getFlagType(name, "bytesHex", bytesHexConv)
55

56
	if err != nil {
57
		return []byte{}, err
58
	}
59

60
	return val.([]byte), nil
61
}
62

63
// BytesHexVar defines an []byte flag with specified name, default value, and usage string.
64
// The argument p points to an []byte variable in which to store the value of the flag.
65
func (f *FlagSet) BytesHexVar(p *[]byte, name string, value []byte, usage string) {
66
	f.VarP(newBytesHexValue(value, p), name, "", usage)
67
}
68

69
// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.
70
func (f *FlagSet) BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {
71
	f.VarP(newBytesHexValue(value, p), name, shorthand, usage)
72
}
73

74
// BytesHexVar defines an []byte flag with specified name, default value, and usage string.
75
// The argument p points to an []byte variable in which to store the value of the flag.
76
func BytesHexVar(p *[]byte, name string, value []byte, usage string) {
77
	CommandLine.VarP(newBytesHexValue(value, p), name, "", usage)
78
}
79

80
// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.
81
func BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {
82
	CommandLine.VarP(newBytesHexValue(value, p), name, shorthand, usage)
83
}
84

85
// BytesHex defines an []byte flag with specified name, default value, and usage string.
86
// The return value is the address of an []byte variable that stores the value of the flag.
87
func (f *FlagSet) BytesHex(name string, value []byte, usage string) *[]byte {
88
	p := new([]byte)
89
	f.BytesHexVarP(p, name, "", value, usage)
90
	return p
91
}
92

93
// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.
94
func (f *FlagSet) BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {
95
	p := new([]byte)
96
	f.BytesHexVarP(p, name, shorthand, value, usage)
97
	return p
98
}
99

100
// BytesHex defines an []byte flag with specified name, default value, and usage string.
101
// The return value is the address of an []byte variable that stores the value of the flag.
102
func BytesHex(name string, value []byte, usage string) *[]byte {
103
	return CommandLine.BytesHexP(name, "", value, usage)
104
}
105

106
// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.
107
func BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {
108
	return CommandLine.BytesHexP(name, shorthand, value, usage)
109
}
110

111
// BytesBase64 adapts []byte for use as a flag. Value of flag is Base64 encoded
112
type bytesBase64Value []byte
113

114
// String implements pflag.Value.String.
115
func (bytesBase64 bytesBase64Value) String() string {
116
	return base64.StdEncoding.EncodeToString([]byte(bytesBase64))
117
}
118

119
// Set implements pflag.Value.Set.
120
func (bytesBase64 *bytesBase64Value) Set(value string) error {
121
	bin, err := base64.StdEncoding.DecodeString(strings.TrimSpace(value))
122

123
	if err != nil {
124
		return err
125
	}
126

127
	*bytesBase64 = bin
128

129
	return nil
130
}
131

132
// Type implements pflag.Value.Type.
133
func (*bytesBase64Value) Type() string {
134
	return "bytesBase64"
135
}
136

137
func newBytesBase64Value(val []byte, p *[]byte) *bytesBase64Value {
138
	*p = val
139
	return (*bytesBase64Value)(p)
140
}
141

142
func bytesBase64ValueConv(sval string) (interface{}, error) {
143

144
	bin, err := base64.StdEncoding.DecodeString(sval)
145
	if err == nil {
146
		return bin, nil
147
	}
148

149
	return nil, fmt.Errorf("invalid string being converted to Bytes: %s %s", sval, err)
150
}
151

152
// GetBytesBase64 return the []byte value of a flag with the given name
153
func (f *FlagSet) GetBytesBase64(name string) ([]byte, error) {
154
	val, err := f.getFlagType(name, "bytesBase64", bytesBase64ValueConv)
155

156
	if err != nil {
157
		return []byte{}, err
158
	}
159

160
	return val.([]byte), nil
161
}
162

163
// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
164
// The argument p points to an []byte variable in which to store the value of the flag.
165
func (f *FlagSet) BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
166
	f.VarP(newBytesBase64Value(value, p), name, "", usage)
167
}
168

169
// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
170
func (f *FlagSet) BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
171
	f.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
172
}
173

174
// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.
175
// The argument p points to an []byte variable in which to store the value of the flag.
176
func BytesBase64Var(p *[]byte, name string, value []byte, usage string) {
177
	CommandLine.VarP(newBytesBase64Value(value, p), name, "", usage)
178
}
179

180
// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.
181
func BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {
182
	CommandLine.VarP(newBytesBase64Value(value, p), name, shorthand, usage)
183
}
184

185
// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
186
// The return value is the address of an []byte variable that stores the value of the flag.
187
func (f *FlagSet) BytesBase64(name string, value []byte, usage string) *[]byte {
188
	p := new([]byte)
189
	f.BytesBase64VarP(p, name, "", value, usage)
190
	return p
191
}
192

193
// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
194
func (f *FlagSet) BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
195
	p := new([]byte)
196
	f.BytesBase64VarP(p, name, shorthand, value, usage)
197
	return p
198
}
199

200
// BytesBase64 defines an []byte flag with specified name, default value, and usage string.
201
// The return value is the address of an []byte variable that stores the value of the flag.
202
func BytesBase64(name string, value []byte, usage string) *[]byte {
203
	return CommandLine.BytesBase64P(name, "", value, usage)
204
}
205

206
// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.
207
func BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {
208
	return CommandLine.BytesBase64P(name, shorthand, value, usage)
209
}
210

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.