Example #1
0
func validateFieldLength(value *string, fldPath *field.Path, min, max int, fieldName string) field.ErrorList {
	allErrs := field.ErrorList{}

	if v := models.StringValue(value); !checkFieldLength(v, min, max) {
		allErrs = append(allErrs, field.Invalid(fldPath.Child(fieldName), v, fmt.Sprintf("%s: %s must be between %d and %d characters", fldPath.String(), fieldName, min, max)))
	}

	return allErrs
}
Example #2
0
func validateRequiredFields(new interface{}, fldPath *field.Path, fields []string) field.ErrorList {
	allErrs := field.ErrorList{}

	news := structs.New(new)

	for _, f := range fields {

		if news.Field(f).IsZero() {
			allErrs = append(allErrs, field.Required(fldPath.Child(f), fmt.Sprintf("%s updates must supply %s", fldPath.String(), news.Field(f).Name())))
		}

	}

	return allErrs
}
Example #3
0
func validateInvalidFields(new interface{}, fldPath *field.Path, fields []string) field.ErrorList {
	allErrs := field.ErrorList{}

	news := structs.New(new)

	for _, f := range fields {

		// ommitting immutable fields is OK
		if news.Field(f).IsZero() {
			continue
		}

		allErrs = append(allErrs, field.Forbidden(fldPath.Child(f), fmt.Sprintf("%s updates must not supply %s", fldPath.String(), news.Field(f).Name())))
	}

	return allErrs
}
Example #4
0
func validateImmutibleFields(new, old interface{}, fldPath *field.Path, fields []string) field.ErrorList {
	allErrs := field.ErrorList{}

	olds := structs.New(old)
	news := structs.New(new)

	for _, f := range fields {

		// ommitting immutable fields is OK
		if news.Field(f).IsZero() {
			continue
		}

		if !reflect.DeepEqual(news.Field(f).Value(), olds.Field(f).Value()) {
			allErrs = append(allErrs, field.Forbidden(fldPath.Child(f), fmt.Sprintf("%s updates must not change %s", fldPath.String(), news.Field(f).Name())))
		}
	}

	return allErrs
}