in tools/config-gen/flag_template_data_gen.go [42:100]
func computeFlagTemplateDataForParam(p Param) (flagTemplateData, error) {
var defaultValue string
var fn string
switch p.Type {
case "int":
if p.DefaultValue == "" {
defaultValue = "0"
} else {
defaultValue = p.DefaultValue
}
fn = "IntP"
case "float64":
if p.DefaultValue == "" {
defaultValue = "0.0"
} else {
defaultValue = p.DefaultValue
}
fn = "Float64P"
case "bool":
if p.DefaultValue == "" {
defaultValue = "false"
} else {
defaultValue = p.DefaultValue
}
fn = "BoolP"
case "duration":
if p.DefaultValue == "" {
defaultValue = "0s"
} else {
defaultValue = p.DefaultValue
}
dur, err := time.ParseDuration(defaultValue)
if err != nil {
return flagTemplateData{}, err
}
defaultValue = fmt.Sprintf("%d * time.Nanosecond", dur.Nanoseconds())
fn = "DurationP"
case "octal", "logSeverity", "protocol", "resolvedPath":
fallthrough
case "string":
defaultValue = fmt.Sprintf("%q", p.DefaultValue)
fn = "StringP"
case "[]int":
defaultValue = fmt.Sprintf("[]int{%s}", p.DefaultValue)
fn = "IntSliceP"
case "[]string":
defaultValue = fmt.Sprintf("[]string{%s}", p.DefaultValue)
fn = "StringSliceP"
default:
return flagTemplateData{}, fmt.Errorf("unhandled type: %s", p.Type)
}
p.DefaultValue = defaultValue
// Usage string safely escaped with Go syntax.
p.Usage = fmt.Sprintf("%q", p.Usage)
return flagTemplateData{
Param: p,
Fn: fn,
}, nil
}