in confgenerator/config.go [117:165]
func (ve validationError) Error() string {
switch ve.Tag() {
case "duration":
return fmt.Sprintf("%q must be a duration of at least %s", ve.Field(), ve.Param())
case "endswith":
return fmt.Sprintf("%q must end with %q", ve.Field(), ve.Param())
case "experimental":
return experimentalValidationErrorString(ve)
case "ip":
return fmt.Sprintf("%q must be an IP address", ve.Field())
case "min":
return fmt.Sprintf("%q must be a minimum of %s", ve.Field(), ve.Param())
case "multipleof_time":
return fmt.Sprintf("%q must be a multiple of %s", ve.Field(), ve.Param())
case "oneof":
return fmt.Sprintf("%q must be one of [%s]", ve.Field(), ve.Param())
case "required":
return fmt.Sprintf("%q is a required field", ve.Field())
case "required_with":
return fmt.Sprintf("%q is required when %q is set", ve.Field(), ve.Param())
case "startsnotwith":
return fmt.Sprintf("%q must not start with %q", ve.Field(), ve.Param())
case "startswith":
return fmt.Sprintf("%q must start with %q", ve.Field(), ve.Param())
case "url":
return fmt.Sprintf("%q must be a URL", ve.Field())
case "excluded_with":
return fmt.Sprintf("%q cannot be set if one of [%s] is set", ve.Field(), ve.Param())
case "filter":
_, err := filter.NewFilter(ve.Value().(string))
return fmt.Sprintf("%q: %v", ve.Field(), err)
case "field":
_, err := filter.NewMember(ve.Value().(string))
return fmt.Sprintf("%q: %v", ve.Field(), err)
case "fieldlegacy":
_, err := filter.NewMemberLegacy(ve.Value().(string))
return fmt.Sprintf("%q: %v", ve.Field(), err)
case "distinctfield":
return fmt.Sprintf("%q specified multiple times", ve.Value().(string))
case "writablefield":
return fmt.Sprintf("%q is not a writable field", ve.Value().(string))
case "winlogchannels":
// Assume validation has already failed by this point, that is, receiver_version must already be > 1
channels := ve.Value().([]string)
return validateWinlogChannels(channels).Error()
}
return ve.FieldError.Error()
}