func ParseArgs()

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)
				}
			}
		}
	}
}