Skip to content

Commit 1f33b80

Browse files
jaffeeeparis
authored andcommitted
add int16 flag (#143)
* add int16 flag copied int32.go to int16.go and s/32/16 added a case to testParse in flag_test.go * test the set value of int16 flag
1 parent a9789e8 commit 1f33b80

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

flag_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ func testParse(f *FlagSet, t *testing.T) {
168168
bool3Flag := f.Bool("bool3", false, "bool3 value")
169169
intFlag := f.Int("int", 0, "int value")
170170
int8Flag := f.Int8("int8", 0, "int value")
171+
int16Flag := f.Int16("int16", 0, "int value")
171172
int32Flag := f.Int32("int32", 0, "int value")
172173
int64Flag := f.Int64("int64", 0, "int64 value")
173174
uintFlag := f.Uint("uint", 0, "uint value")
@@ -192,6 +193,7 @@ func testParse(f *FlagSet, t *testing.T) {
192193
"--bool3=false",
193194
"--int=22",
194195
"--int8=-8",
196+
"--int16=-16",
195197
"--int32=-32",
196198
"--int64=0x23",
197199
"--uint", "24",
@@ -236,9 +238,15 @@ func testParse(f *FlagSet, t *testing.T) {
236238
if *int8Flag != -8 {
237239
t.Error("int8 flag should be 0x23, is ", *int8Flag)
238240
}
241+
if *int16Flag != -16 {
242+
t.Error("int16 flag should be -16, is ", *int16Flag)
243+
}
239244
if v, err := f.GetInt8("int8"); err != nil || v != *int8Flag {
240245
t.Error("GetInt8 does not work.")
241246
}
247+
if v, err := f.GetInt16("int16"); err != nil || v != *int16Flag {
248+
t.Error("GetInt16 does not work.")
249+
}
242250
if *int32Flag != -32 {
243251
t.Error("int32 flag should be 0x23, is ", *int32Flag)
244252
}

int16.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package pflag
2+
3+
import "strconv"
4+
5+
// -- int16 Value
6+
type int16Value int16
7+
8+
func newInt16Value(val int16, p *int16) *int16Value {
9+
*p = val
10+
return (*int16Value)(p)
11+
}
12+
13+
func (i *int16Value) Set(s string) error {
14+
v, err := strconv.ParseInt(s, 0, 16)
15+
*i = int16Value(v)
16+
return err
17+
}
18+
19+
func (i *int16Value) Type() string {
20+
return "int16"
21+
}
22+
23+
func (i *int16Value) String() string { return strconv.FormatInt(int64(*i), 10) }
24+
25+
func int16Conv(sval string) (interface{}, error) {
26+
v, err := strconv.ParseInt(sval, 0, 16)
27+
if err != nil {
28+
return 0, err
29+
}
30+
return int16(v), nil
31+
}
32+
33+
// GetInt16 returns the int16 value of a flag with the given name
34+
func (f *FlagSet) GetInt16(name string) (int16, error) {
35+
val, err := f.getFlagType(name, "int16", int16Conv)
36+
if err != nil {
37+
return 0, err
38+
}
39+
return val.(int16), nil
40+
}
41+
42+
// Int16Var defines an int16 flag with specified name, default value, and usage string.
43+
// The argument p points to an int16 variable in which to store the value of the flag.
44+
func (f *FlagSet) Int16Var(p *int16, name string, value int16, usage string) {
45+
f.VarP(newInt16Value(value, p), name, "", usage)
46+
}
47+
48+
// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.
49+
func (f *FlagSet) Int16VarP(p *int16, name, shorthand string, value int16, usage string) {
50+
f.VarP(newInt16Value(value, p), name, shorthand, usage)
51+
}
52+
53+
// Int16Var defines an int16 flag with specified name, default value, and usage string.
54+
// The argument p points to an int16 variable in which to store the value of the flag.
55+
func Int16Var(p *int16, name string, value int16, usage string) {
56+
CommandLine.VarP(newInt16Value(value, p), name, "", usage)
57+
}
58+
59+
// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.
60+
func Int16VarP(p *int16, name, shorthand string, value int16, usage string) {
61+
CommandLine.VarP(newInt16Value(value, p), name, shorthand, usage)
62+
}
63+
64+
// Int16 defines an int16 flag with specified name, default value, and usage string.
65+
// The return value is the address of an int16 variable that stores the value of the flag.
66+
func (f *FlagSet) Int16(name string, value int16, usage string) *int16 {
67+
p := new(int16)
68+
f.Int16VarP(p, name, "", value, usage)
69+
return p
70+
}
71+
72+
// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.
73+
func (f *FlagSet) Int16P(name, shorthand string, value int16, usage string) *int16 {
74+
p := new(int16)
75+
f.Int16VarP(p, name, shorthand, value, usage)
76+
return p
77+
}
78+
79+
// Int16 defines an int16 flag with specified name, default value, and usage string.
80+
// The return value is the address of an int16 variable that stores the value of the flag.
81+
func Int16(name string, value int16, usage string) *int16 {
82+
return CommandLine.Int16P(name, "", value, usage)
83+
}
84+
85+
// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.
86+
func Int16P(name, shorthand string, value int16, usage string) *int16 {
87+
return CommandLine.Int16P(name, shorthand, value, usage)
88+
}

0 commit comments

Comments
 (0)