in common/args.go [34:85]
func ParseArgs(args *ArgumentList, usage func()) {
argList = args
usageFunc = usage
// Setup all arguments.
for _, arg := range *args {
switch arg.Type {
case "bool":
flag.BoolVar(&arg.boolVal, arg.Name, arg.DefaultValue.(bool), arg.Description)
flag.BoolVar(&arg.boolVal, arg.Shorthand, arg.DefaultValue.(bool), arg.Description)
case "int", "string":
flag.StringVar(&arg.strVal, arg.Name, arg.DefaultValue.(string), arg.Description)
flag.StringVar(&arg.strVal, arg.Shorthand, arg.DefaultValue.(string), arg.Description)
}
}
// Parse the flag set.
flag.Usage = printHelp
flag.Parse()
// Validate arguments and convert them to their mapped values.
for _, arg := range *args {
switch arg.Type {
case "bool":
arg.Value = arg.boolVal
case "string":
if arg.ValueMap == nil {
// Argument is a free-form string.
arg.Value = arg.strVal
} else {
// Argument must match one of the values in the map.
arg.strVal = strings.ToLower(arg.strVal)
arg.Value = arg.strVal
if arg.ValueMap[arg.strVal] == nil {
printErrorForArg(arg)
}
}
case "int":
if arg.ValueMap == nil {
// Argument is a free-form integer.
arg.Value, _ = strconv.Atoi(arg.strVal)
} else {
// Argument must match one of the values in the map.
arg.strVal = strings.ToLower(arg.strVal)
arg.Value = arg.ValueMap[arg.strVal]
if arg.Value == nil {
printErrorForArg(arg)
}
}
}
}
}