@@ -151,6 +151,20 @@ func missing(t string, v interface{}) bool {
151
151
return true
152
152
}
153
153
154
+ func parseBool (text string ) (bool , error ) {
155
+ if b , err := strconv .ParseBool (text ); err == nil {
156
+ return b , nil
157
+ }
158
+ switch text {
159
+ case "y" , "Y" , "yes" , "ok" , "OK" :
160
+ return true , nil
161
+ case "n" , "N" , "no" , "nope" :
162
+ return false , nil
163
+ }
164
+ v , err := strconv .Atoi (text )
165
+ return v > 0 , err
166
+ }
167
+
154
168
func (c * Context ) prompt (prompt , ftype string ) (interface {}, error ) {
155
169
input := bufio .NewReader (c .input )
156
170
fmt .Fprintf (os .Stderr , "%s " , prompt )
@@ -159,24 +173,29 @@ func (c *Context) prompt(prompt, ftype string) (interface{}, error) {
159
173
switch ftype {
160
174
case "string" :
161
175
return text , nil
162
- case "int" :
163
- return strconv .Atoi (text )
164
176
case "float" :
165
177
return strconv .ParseFloat (text , 64 )
166
- case "bool " :
167
- if b , err := strconv .ParseBool (text ); err == nil {
168
- return b , nil
178
+ case "int " :
179
+ if i , err := strconv .Atoi (text ); err == nil {
180
+ return i , nil
169
181
}
170
- switch text {
171
- case "y" , "Y" , "yes" , "ok" , "OK" :
172
- return true , nil
182
+ // special case -- int can be used to implement a bool if a default is not provided
183
+ // so we need to handle parsing int from text for purpose of determining a bool
184
+ b , err := parseBool (text )
185
+ if err != nil {
186
+ return b , err
173
187
}
174
- if v , err := strconv .Atoi (text ); err == nil {
175
- return v > 0 , nil
188
+ if b {
189
+ return 1 , nil
190
+ }
191
+ return 0 , nil
192
+ case "bool" :
193
+ if b , err := parseBool (text ); err == nil {
194
+ return b , nil
176
195
}
177
196
return nil , fmt .Errorf ("cannot parse input for boolean: %v" , text )
178
197
}
179
- return nil , nil
198
+ return nil , nil // don't err, just pass through
180
199
}
181
200
182
201
// Funcs returns the template functions
0 commit comments