commands: Fixed handling of int/uint option values
Matt Bell committed
Nov 10, 2014 at 22:41 UTC
a9bd172414c8553ba59b394b52aa25945a05fbc1
1 file changed
+12
-11
commands/request.go
+12
-11
@@ -129,10 +129,18 @@ var converters = map[reflect.Kind]converter{
129
return strconv.ParseBool(v)
130
},
131
Int: func(v string) (interface{}, error) {
132
- return strconv.ParseInt(v, 0, 32)
132
+ val, err := strconv.ParseInt(v, 0, 32)
133
+ if err != nil {
134
+ return nil, err
135
+ }
136
+ return int(val), err
137
},
138
Uint: func(v string) (interface{}, error) {
135
- return strconv.ParseInt(v, 0, 32)
139
+ val, err := strconv.ParseUint(v, 0, 32)
140
+ if err != nil {
141
+ return nil, err
142
+ }
143
+ return int(val), err
144
},
145
Float: func(v string) (interface{}, error) {
146
return strconv.ParseFloat(v, 64)
@@ -140,8 +148,6 @@ var converters = map[reflect.Kind]converter{
148
}
149
150
func (r *request) ConvertOptions() error {
143
- converted := make(map[string]interface{})
144
-
151
for k, v := range r.options {
152
opt, ok := r.optionDefs[k]
153
if !ok {
@@ -149,8 +155,6 @@ func (r *request) ConvertOptions() error {
155
}
156
157
kind := reflect.TypeOf(v).Kind()
152
- var value interface{}
153
-
158
if kind != opt.Type {
159
if kind == String {
160
convert := converters[opt.Type]
@@ -163,14 +167,14 @@ func (r *request) ConvertOptions() error {
167
return fmt.Errorf("Could not convert string value '%s' to type '%s'",
168
v, opt.Type.String())
169
}
166
- value = val
170
+ r.options[k] = val
171
172
} else {
173
return fmt.Errorf("Option '%s' should be type '%s', but got type '%s'",
174
k, opt.Type.String(), kind.String())
175
}
176
} else {
173
- value = v
177
+ r.options[k] = v
178
}
179
180
for _, name := range opt.Names {
@@ -178,12 +182,9 @@ func (r *request) ConvertOptions() error {
182
return fmt.Errorf("Duplicate command options were provided ('%s' and '%s')",
183
k, name)
184
}
181
-
182
- converted[name] = value
185
}
186
}
187
186
- r.options = converted
188
return nil
189
}
190