diff --git a/pkg/apis/admissionregistration/v1/zz_generated.validations.go b/pkg/apis/admissionregistration/v1/zz_generated.validations.go index fd858f722c7..05eeed138ef 100644 --- a/pkg/apis/admissionregistration/v1/zz_generated.validations.go +++ b/pkg/apis/admissionregistration/v1/zz_generated.validations.go @@ -40,48 +40,73 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type ValidatingAdmissionPolicyBinding - scheme.AddValidationFunc((*admissionregistrationv1.ValidatingAdmissionPolicyBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ValidatingAdmissionPolicyBinding(ctx, op, nil /* fldPath */, obj.(*admissionregistrationv1.ValidatingAdmissionPolicyBinding), safe.Cast[*admissionregistrationv1.ValidatingAdmissionPolicyBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*admissionregistrationv1.ValidatingAdmissionPolicyBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ValidatingAdmissionPolicyBinding( + ctx, op, nil, /* fldPath */ + obj.(*admissionregistrationv1.ValidatingAdmissionPolicyBinding), + safe.Cast[*admissionregistrationv1.ValidatingAdmissionPolicyBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ValidatingAdmissionPolicyBinding validates an instance of ValidatingAdmissionPolicyBinding according // to declarative validation rules in the API schema. -func Validate_ValidatingAdmissionPolicyBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBinding) (errs field.ErrorList) { +func Validate_ValidatingAdmissionPolicyBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBinding) (errs field.ErrorList) { + // field admissionregistrationv1.ValidatingAdmissionPolicyBinding.TypeMeta has no validation // field admissionregistrationv1.ValidatingAdmissionPolicyBinding.ObjectMeta has no validation - // field admissionregistrationv1.ValidatingAdmissionPolicyBinding.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field admissionregistrationv1.ValidatingAdmissionPolicyBinding.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatingAdmissionPolicyBindingSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBinding) *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBinding) *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatingAdmissionPolicyBindingSpec validates an instance of ValidatingAdmissionPolicyBindingSpec according // to declarative validation rules in the API schema. -func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec) (errs field.ErrorList) { - // field admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec.PolicyName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ValidatingAdmissionPolicyBindingSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec) (errs field.ErrorList) { + + { // field admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec.PolicyName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -93,19 +118,27 @@ func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op opera return // do not proceed } return - }(fldPath.Child("policyName"), &obj.PolicyName, safe.Field(oldObj, func(oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec) *string { - return &oldObj.PolicyName - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec) *string { + return &oldObj.PolicyName + }) + errs = append(errs, fn(fldPath.Child("policyName"), &obj.PolicyName, oldVal, oldObj != nil)...) + } // field admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec.ParamRef has no validation // field admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec.MatchResources has no validation - // field admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec.ValidationActions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []admissionregistrationv1.ValidationAction, oldValueCorrelated bool) (errs field.ErrorList) { + { // field admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec.ValidationActions + fn := func( + fldPath *field.Path, + obj, oldObj []admissionregistrationv1.ValidationAction, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -117,9 +150,13 @@ func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op opera return // do not proceed } return - }(fldPath.Child("validationActions"), obj.ValidationActions, safe.Field(oldObj, func(oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec) []admissionregistrationv1.ValidationAction { - return oldObj.ValidationActions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec) []admissionregistrationv1.ValidationAction { + return oldObj.ValidationActions + }) + errs = append(errs, fn(fldPath.Child("validationActions"), obj.ValidationActions, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/admissionregistration/v1alpha1/zz_generated.validations.go b/pkg/apis/admissionregistration/v1alpha1/zz_generated.validations.go index f5d734f52ec..af1640bb8e0 100644 --- a/pkg/apis/admissionregistration/v1alpha1/zz_generated.validations.go +++ b/pkg/apis/admissionregistration/v1alpha1/zz_generated.validations.go @@ -40,48 +40,73 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type ValidatingAdmissionPolicyBinding - scheme.AddValidationFunc((*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ValidatingAdmissionPolicyBinding(ctx, op, nil /* fldPath */, obj.(*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding), safe.Cast[*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ValidatingAdmissionPolicyBinding( + ctx, op, nil, /* fldPath */ + obj.(*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding), + safe.Cast[*admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ValidatingAdmissionPolicyBinding validates an instance of ValidatingAdmissionPolicyBinding according // to declarative validation rules in the API schema. -func Validate_ValidatingAdmissionPolicyBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding) (errs field.ErrorList) { +func Validate_ValidatingAdmissionPolicyBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding) (errs field.ErrorList) { + // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding.TypeMeta has no validation // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding.ObjectMeta has no validation - // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatingAdmissionPolicyBindingSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding) *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding) *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatingAdmissionPolicyBindingSpec validates an instance of ValidatingAdmissionPolicyBindingSpec according // to declarative validation rules in the API schema. -func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec) (errs field.ErrorList) { - // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec.PolicyName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ValidatingAdmissionPolicyBindingSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec) (errs field.ErrorList) { + + { // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec.PolicyName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -93,19 +118,27 @@ func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op opera return // do not proceed } return - }(fldPath.Child("policyName"), &obj.PolicyName, safe.Field(oldObj, func(oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec) *string { - return &oldObj.PolicyName - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec) *string { + return &oldObj.PolicyName + }) + errs = append(errs, fn(fldPath.Child("policyName"), &obj.PolicyName, oldVal, oldObj != nil)...) + } // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec.ParamRef has no validation // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec.MatchResources has no validation - // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec.ValidationActions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []admissionregistrationv1alpha1.ValidationAction, oldValueCorrelated bool) (errs field.ErrorList) { + { // field admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec.ValidationActions + fn := func( + fldPath *field.Path, + obj, oldObj []admissionregistrationv1alpha1.ValidationAction, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -117,9 +150,13 @@ func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op opera return // do not proceed } return - }(fldPath.Child("validationActions"), obj.ValidationActions, safe.Field(oldObj, func(oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec) []admissionregistrationv1alpha1.ValidationAction { - return oldObj.ValidationActions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec) []admissionregistrationv1alpha1.ValidationAction { + return oldObj.ValidationActions + }) + errs = append(errs, fn(fldPath.Child("validationActions"), obj.ValidationActions, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/admissionregistration/v1beta1/zz_generated.validations.go b/pkg/apis/admissionregistration/v1beta1/zz_generated.validations.go index 570613e351d..c09e585432d 100644 --- a/pkg/apis/admissionregistration/v1beta1/zz_generated.validations.go +++ b/pkg/apis/admissionregistration/v1beta1/zz_generated.validations.go @@ -40,48 +40,73 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type ValidatingAdmissionPolicyBinding - scheme.AddValidationFunc((*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ValidatingAdmissionPolicyBinding(ctx, op, nil /* fldPath */, obj.(*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding), safe.Cast[*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ValidatingAdmissionPolicyBinding( + ctx, op, nil, /* fldPath */ + obj.(*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding), + safe.Cast[*admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ValidatingAdmissionPolicyBinding validates an instance of ValidatingAdmissionPolicyBinding according // to declarative validation rules in the API schema. -func Validate_ValidatingAdmissionPolicyBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding) (errs field.ErrorList) { +func Validate_ValidatingAdmissionPolicyBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding) (errs field.ErrorList) { + // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding.TypeMeta has no validation // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding.ObjectMeta has no validation - // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatingAdmissionPolicyBindingSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding) *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding) *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatingAdmissionPolicyBindingSpec validates an instance of ValidatingAdmissionPolicyBindingSpec according // to declarative validation rules in the API schema. -func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec) (errs field.ErrorList) { - // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec.PolicyName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ValidatingAdmissionPolicyBindingSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec) (errs field.ErrorList) { + + { // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec.PolicyName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -93,19 +118,27 @@ func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op opera return // do not proceed } return - }(fldPath.Child("policyName"), &obj.PolicyName, safe.Field(oldObj, func(oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec) *string { - return &oldObj.PolicyName - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec) *string { + return &oldObj.PolicyName + }) + errs = append(errs, fn(fldPath.Child("policyName"), &obj.PolicyName, oldVal, oldObj != nil)...) + } // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec.ParamRef has no validation // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec.MatchResources has no validation - // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec.ValidationActions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []admissionregistrationv1beta1.ValidationAction, oldValueCorrelated bool) (errs field.ErrorList) { + { // field admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec.ValidationActions + fn := func( + fldPath *field.Path, + obj, oldObj []admissionregistrationv1beta1.ValidationAction, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -117,9 +150,13 @@ func Validate_ValidatingAdmissionPolicyBindingSpec(ctx context.Context, op opera return // do not proceed } return - }(fldPath.Child("validationActions"), obj.ValidationActions, safe.Field(oldObj, func(oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec) []admissionregistrationv1beta1.ValidationAction { - return oldObj.ValidationActions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec) []admissionregistrationv1beta1.ValidationAction { + return oldObj.ValidationActions + }) + errs = append(errs, fn(fldPath.Child("validationActions"), obj.ValidationActions, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/apps/v1beta1/zz_generated.validations.go b/pkg/apis/apps/v1beta1/zz_generated.validations.go index 8d8b87826c0..225c87224ec 100644 --- a/pkg/apis/apps/v1beta1/zz_generated.validations.go +++ b/pkg/apis/apps/v1beta1/zz_generated.validations.go @@ -39,33 +39,53 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type Scale - scheme.AddValidationFunc((*appsv1beta1.Scale)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/scale": - return Validate_Scale(ctx, op, nil /* fldPath */, obj.(*appsv1beta1.Scale), safe.Cast[*appsv1beta1.Scale](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*appsv1beta1.Scale)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/scale": + return Validate_Scale( + ctx, op, nil, /* fldPath */ + obj.(*appsv1beta1.Scale), + safe.Cast[*appsv1beta1.Scale](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Scale validates an instance of Scale according // to declarative validation rules in the API schema. -func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *appsv1beta1.Scale) (errs field.ErrorList) { +func Validate_Scale( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *appsv1beta1.Scale) (errs field.ErrorList) { + // field appsv1beta1.Scale.TypeMeta has no validation // field appsv1beta1.Scale.ObjectMeta has no validation - // field appsv1beta1.Scale.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *appsv1beta1.ScaleSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field appsv1beta1.Scale.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *appsv1beta1.ScaleSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ScaleSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *appsv1beta1.Scale) *appsv1beta1.ScaleSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *appsv1beta1.Scale) *appsv1beta1.ScaleSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field appsv1beta1.Scale.Status has no validation return errs @@ -73,19 +93,34 @@ func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field. // Validate_ScaleSpec validates an instance of ScaleSpec according // to declarative validation rules in the API schema. -func Validate_ScaleSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *appsv1beta1.ScaleSpec) (errs field.ErrorList) { - // field appsv1beta1.ScaleSpec.Replicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ScaleSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *appsv1beta1.ScaleSpec) (errs field.ErrorList) { + + { // field appsv1beta1.ScaleSpec.Replicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("replicas"), &obj.Replicas, safe.Field(oldObj, func(oldObj *appsv1beta1.ScaleSpec) *int32 { return &oldObj.Replicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *appsv1beta1.ScaleSpec) *int32 { + return &oldObj.Replicas + }) + errs = append(errs, fn(fldPath.Child("replicas"), &obj.Replicas, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/apps/v1beta2/zz_generated.validations.go b/pkg/apis/apps/v1beta2/zz_generated.validations.go index e010880d583..5eee63c7dde 100644 --- a/pkg/apis/apps/v1beta2/zz_generated.validations.go +++ b/pkg/apis/apps/v1beta2/zz_generated.validations.go @@ -39,33 +39,53 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type Scale - scheme.AddValidationFunc((*appsv1beta2.Scale)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/scale": - return Validate_Scale(ctx, op, nil /* fldPath */, obj.(*appsv1beta2.Scale), safe.Cast[*appsv1beta2.Scale](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*appsv1beta2.Scale)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/scale": + return Validate_Scale( + ctx, op, nil, /* fldPath */ + obj.(*appsv1beta2.Scale), + safe.Cast[*appsv1beta2.Scale](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Scale validates an instance of Scale according // to declarative validation rules in the API schema. -func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *appsv1beta2.Scale) (errs field.ErrorList) { +func Validate_Scale( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *appsv1beta2.Scale) (errs field.ErrorList) { + // field appsv1beta2.Scale.TypeMeta has no validation // field appsv1beta2.Scale.ObjectMeta has no validation - // field appsv1beta2.Scale.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *appsv1beta2.ScaleSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field appsv1beta2.Scale.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *appsv1beta2.ScaleSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ScaleSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *appsv1beta2.Scale) *appsv1beta2.ScaleSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *appsv1beta2.Scale) *appsv1beta2.ScaleSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field appsv1beta2.Scale.Status has no validation return errs @@ -73,19 +93,34 @@ func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field. // Validate_ScaleSpec validates an instance of ScaleSpec according // to declarative validation rules in the API schema. -func Validate_ScaleSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *appsv1beta2.ScaleSpec) (errs field.ErrorList) { - // field appsv1beta2.ScaleSpec.Replicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ScaleSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *appsv1beta2.ScaleSpec) (errs field.ErrorList) { + + { // field appsv1beta2.ScaleSpec.Replicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("replicas"), &obj.Replicas, safe.Field(oldObj, func(oldObj *appsv1beta2.ScaleSpec) *int32 { return &oldObj.Replicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *appsv1beta2.ScaleSpec) *int32 { + return &oldObj.Replicas + }) + errs = append(errs, fn(fldPath.Child("replicas"), &obj.Replicas, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/autoscaling/v1/zz_generated.validations.go b/pkg/apis/autoscaling/v1/zz_generated.validations.go index ca0f654f1d8..ee4407278d1 100644 --- a/pkg/apis/autoscaling/v1/zz_generated.validations.go +++ b/pkg/apis/autoscaling/v1/zz_generated.validations.go @@ -40,43 +40,68 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type HorizontalPodAutoscaler - scheme.AddValidationFunc((*autoscalingv1.HorizontalPodAutoscaler)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_HorizontalPodAutoscaler(ctx, op, nil /* fldPath */, obj.(*autoscalingv1.HorizontalPodAutoscaler), safe.Cast[*autoscalingv1.HorizontalPodAutoscaler](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*autoscalingv1.HorizontalPodAutoscaler)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_HorizontalPodAutoscaler( + ctx, op, nil, /* fldPath */ + obj.(*autoscalingv1.HorizontalPodAutoscaler), + safe.Cast[*autoscalingv1.HorizontalPodAutoscaler](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Scale - scheme.AddValidationFunc((*autoscalingv1.Scale)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/scale": - return Validate_Scale(ctx, op, nil /* fldPath */, obj.(*autoscalingv1.Scale), safe.Cast[*autoscalingv1.Scale](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*autoscalingv1.Scale)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/scale": + return Validate_Scale( + ctx, op, nil, /* fldPath */ + obj.(*autoscalingv1.Scale), + safe.Cast[*autoscalingv1.Scale](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_HorizontalPodAutoscaler validates an instance of HorizontalPodAutoscaler according // to declarative validation rules in the API schema. -func Validate_HorizontalPodAutoscaler(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *autoscalingv1.HorizontalPodAutoscaler) (errs field.ErrorList) { +func Validate_HorizontalPodAutoscaler( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *autoscalingv1.HorizontalPodAutoscaler) (errs field.ErrorList) { + // field autoscalingv1.HorizontalPodAutoscaler.TypeMeta has no validation // field autoscalingv1.HorizontalPodAutoscaler.ObjectMeta has no validation - // field autoscalingv1.HorizontalPodAutoscaler.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *autoscalingv1.HorizontalPodAutoscalerSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field autoscalingv1.HorizontalPodAutoscaler.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *autoscalingv1.HorizontalPodAutoscalerSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_HorizontalPodAutoscalerSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *autoscalingv1.HorizontalPodAutoscaler) *autoscalingv1.HorizontalPodAutoscalerSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv1.HorizontalPodAutoscaler) *autoscalingv1.HorizontalPodAutoscalerSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field autoscalingv1.HorizontalPodAutoscaler.Status has no validation return errs @@ -84,15 +109,22 @@ func Validate_HorizontalPodAutoscaler(ctx context.Context, op operation.Operatio // Validate_HorizontalPodAutoscalerSpec validates an instance of HorizontalPodAutoscalerSpec according // to declarative validation rules in the API schema. -func Validate_HorizontalPodAutoscalerSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *autoscalingv1.HorizontalPodAutoscalerSpec) (errs field.ErrorList) { +func Validate_HorizontalPodAutoscalerSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *autoscalingv1.HorizontalPodAutoscalerSpec) (errs field.ErrorList) { + // field autoscalingv1.HorizontalPodAutoscalerSpec.ScaleTargetRef has no validation - // field autoscalingv1.HorizontalPodAutoscalerSpec.MinReplicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field autoscalingv1.HorizontalPodAutoscalerSpec.MinReplicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -102,21 +134,37 @@ func Validate_HorizontalPodAutoscalerSpec(ctx context.Context, op operation.Oper if earlyReturn { return // do not proceed } - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 0) - }).MarkAlpha()...) - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 1) - }).MarkAlpha()...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 0) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 1) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("minReplicas"), obj.MinReplicas, safe.Field(oldObj, func(oldObj *autoscalingv1.HorizontalPodAutoscalerSpec) *int32 { return oldObj.MinReplicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv1.HorizontalPodAutoscalerSpec) *int32 { + return oldObj.MinReplicas + }) + errs = append(errs, fn(fldPath.Child("minReplicas"), obj.MinReplicas, oldVal, oldObj != nil)...) + } - // field autoscalingv1.HorizontalPodAutoscalerSpec.MaxReplicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field autoscalingv1.HorizontalPodAutoscalerSpec.MaxReplicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -127,9 +175,17 @@ func Validate_HorizontalPodAutoscalerSpec(ctx context.Context, op operation.Oper if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("maxReplicas"), &obj.MaxReplicas, safe.Field(oldObj, func(oldObj *autoscalingv1.HorizontalPodAutoscalerSpec) *int32 { return &oldObj.MaxReplicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv1.HorizontalPodAutoscalerSpec) *int32 { + return &oldObj.MaxReplicas + }) + errs = append(errs, fn(fldPath.Child("maxReplicas"), &obj.MaxReplicas, oldVal, oldObj != nil)...) + } // field autoscalingv1.HorizontalPodAutoscalerSpec.TargetCPUUtilizationPercentage has no validation return errs @@ -137,21 +193,34 @@ func Validate_HorizontalPodAutoscalerSpec(ctx context.Context, op operation.Oper // Validate_Scale validates an instance of Scale according // to declarative validation rules in the API schema. -func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *autoscalingv1.Scale) (errs field.ErrorList) { +func Validate_Scale( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *autoscalingv1.Scale) (errs field.ErrorList) { + // field autoscalingv1.Scale.TypeMeta has no validation // field autoscalingv1.Scale.ObjectMeta has no validation - // field autoscalingv1.Scale.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *autoscalingv1.ScaleSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field autoscalingv1.Scale.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *autoscalingv1.ScaleSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ScaleSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *autoscalingv1.Scale) *autoscalingv1.ScaleSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv1.Scale) *autoscalingv1.ScaleSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field autoscalingv1.Scale.Status has no validation return errs @@ -159,19 +228,34 @@ func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field. // Validate_ScaleSpec validates an instance of ScaleSpec according // to declarative validation rules in the API schema. -func Validate_ScaleSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *autoscalingv1.ScaleSpec) (errs field.ErrorList) { - // field autoscalingv1.ScaleSpec.Replicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ScaleSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *autoscalingv1.ScaleSpec) (errs field.ErrorList) { + + { // field autoscalingv1.ScaleSpec.Replicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("replicas"), &obj.Replicas, safe.Field(oldObj, func(oldObj *autoscalingv1.ScaleSpec) *int32 { return &oldObj.Replicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv1.ScaleSpec) *int32 { + return &oldObj.Replicas + }) + errs = append(errs, fn(fldPath.Child("replicas"), &obj.Replicas, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/autoscaling/v2/zz_generated.validations.go b/pkg/apis/autoscaling/v2/zz_generated.validations.go index cea94c1aba0..a62795b4504 100644 --- a/pkg/apis/autoscaling/v2/zz_generated.validations.go +++ b/pkg/apis/autoscaling/v2/zz_generated.validations.go @@ -40,35 +40,53 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type HorizontalPodAutoscaler - scheme.AddValidationFunc((*autoscalingv2.HorizontalPodAutoscaler)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_HorizontalPodAutoscaler(ctx, op, nil /* fldPath */, obj.(*autoscalingv2.HorizontalPodAutoscaler), safe.Cast[*autoscalingv2.HorizontalPodAutoscaler](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*autoscalingv2.HorizontalPodAutoscaler)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_HorizontalPodAutoscaler( + ctx, op, nil, /* fldPath */ + obj.(*autoscalingv2.HorizontalPodAutoscaler), + safe.Cast[*autoscalingv2.HorizontalPodAutoscaler](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_HorizontalPodAutoscaler validates an instance of HorizontalPodAutoscaler according // to declarative validation rules in the API schema. -func Validate_HorizontalPodAutoscaler(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *autoscalingv2.HorizontalPodAutoscaler) (errs field.ErrorList) { +func Validate_HorizontalPodAutoscaler( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *autoscalingv2.HorizontalPodAutoscaler) (errs field.ErrorList) { + // field autoscalingv2.HorizontalPodAutoscaler.TypeMeta has no validation // field autoscalingv2.HorizontalPodAutoscaler.ObjectMeta has no validation - // field autoscalingv2.HorizontalPodAutoscaler.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *autoscalingv2.HorizontalPodAutoscalerSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field autoscalingv2.HorizontalPodAutoscaler.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *autoscalingv2.HorizontalPodAutoscalerSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_HorizontalPodAutoscalerSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *autoscalingv2.HorizontalPodAutoscaler) *autoscalingv2.HorizontalPodAutoscalerSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv2.HorizontalPodAutoscaler) *autoscalingv2.HorizontalPodAutoscalerSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field autoscalingv2.HorizontalPodAutoscaler.Status has no validation return errs @@ -76,15 +94,22 @@ func Validate_HorizontalPodAutoscaler(ctx context.Context, op operation.Operatio // Validate_HorizontalPodAutoscalerSpec validates an instance of HorizontalPodAutoscalerSpec according // to declarative validation rules in the API schema. -func Validate_HorizontalPodAutoscalerSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *autoscalingv2.HorizontalPodAutoscalerSpec) (errs field.ErrorList) { +func Validate_HorizontalPodAutoscalerSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *autoscalingv2.HorizontalPodAutoscalerSpec) (errs field.ErrorList) { + // field autoscalingv2.HorizontalPodAutoscalerSpec.ScaleTargetRef has no validation - // field autoscalingv2.HorizontalPodAutoscalerSpec.MinReplicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field autoscalingv2.HorizontalPodAutoscalerSpec.MinReplicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -94,21 +119,37 @@ func Validate_HorizontalPodAutoscalerSpec(ctx context.Context, op operation.Oper if earlyReturn { return // do not proceed } - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 0) - }).MarkAlpha()...) - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 1) - }).MarkAlpha()...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 0) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "HPAScaleToZero", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 1) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("minReplicas"), obj.MinReplicas, safe.Field(oldObj, func(oldObj *autoscalingv2.HorizontalPodAutoscalerSpec) *int32 { return oldObj.MinReplicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv2.HorizontalPodAutoscalerSpec) *int32 { + return oldObj.MinReplicas + }) + errs = append(errs, fn(fldPath.Child("minReplicas"), obj.MinReplicas, oldVal, oldObj != nil)...) + } - // field autoscalingv2.HorizontalPodAutoscalerSpec.MaxReplicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field autoscalingv2.HorizontalPodAutoscalerSpec.MaxReplicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -119,9 +160,17 @@ func Validate_HorizontalPodAutoscalerSpec(ctx context.Context, op operation.Oper if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("maxReplicas"), &obj.MaxReplicas, safe.Field(oldObj, func(oldObj *autoscalingv2.HorizontalPodAutoscalerSpec) *int32 { return &oldObj.MaxReplicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *autoscalingv2.HorizontalPodAutoscalerSpec) *int32 { + return &oldObj.MaxReplicas + }) + errs = append(errs, fn(fldPath.Child("maxReplicas"), &obj.MaxReplicas, oldVal, oldObj != nil)...) + } // field autoscalingv2.HorizontalPodAutoscalerSpec.Metrics has no validation // field autoscalingv2.HorizontalPodAutoscalerSpec.Behavior has no validation diff --git a/pkg/apis/batch/v1/zz_generated.validations.go b/pkg/apis/batch/v1/zz_generated.validations.go index 69c8bcecfdb..3902f60993c 100644 --- a/pkg/apis/batch/v1/zz_generated.validations.go +++ b/pkg/apis/batch/v1/zz_generated.validations.go @@ -40,33 +40,53 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type CronJob - scheme.AddValidationFunc((*batchv1.CronJob)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_CronJob(ctx, op, nil /* fldPath */, obj.(*batchv1.CronJob), safe.Cast[*batchv1.CronJob](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*batchv1.CronJob)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_CronJob( + ctx, op, nil, /* fldPath */ + obj.(*batchv1.CronJob), + safe.Cast[*batchv1.CronJob](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_CronJob validates an instance of CronJob according // to declarative validation rules in the API schema. -func Validate_CronJob(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *batchv1.CronJob) (errs field.ErrorList) { +func Validate_CronJob( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *batchv1.CronJob) (errs field.ErrorList) { + // field batchv1.CronJob.TypeMeta has no validation // field batchv1.CronJob.ObjectMeta has no validation - // field batchv1.CronJob.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *batchv1.CronJobSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field batchv1.CronJob.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *batchv1.CronJobSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_CronJobSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *batchv1.CronJob) *batchv1.CronJobSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *batchv1.CronJob) *batchv1.CronJobSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field batchv1.CronJob.Status has no validation return errs @@ -74,13 +94,20 @@ func Validate_CronJob(ctx context.Context, op operation.Operation, fldPath *fiel // Validate_CronJobSpec validates an instance of CronJobSpec according // to declarative validation rules in the API schema. -func Validate_CronJobSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *batchv1.CronJobSpec) (errs field.ErrorList) { - // field batchv1.CronJobSpec.Schedule - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_CronJobSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *batchv1.CronJobSpec) (errs field.ErrorList) { + + { // field batchv1.CronJobSpec.Schedule + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -92,7 +119,13 @@ func Validate_CronJobSpec(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } return - }(fldPath.Child("schedule"), &obj.Schedule, safe.Field(oldObj, func(oldObj *batchv1.CronJobSpec) *string { return &oldObj.Schedule }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *batchv1.CronJobSpec) *string { + return &oldObj.Schedule + }) + errs = append(errs, fn(fldPath.Child("schedule"), &obj.Schedule, oldVal, oldObj != nil)...) + } // field batchv1.CronJobSpec.TimeZone has no validation // field batchv1.CronJobSpec.StartingDeadlineSeconds has no validation diff --git a/pkg/apis/batch/v1beta1/zz_generated.validations.go b/pkg/apis/batch/v1beta1/zz_generated.validations.go index 55d01eaaa1d..5fdef0ef1ea 100644 --- a/pkg/apis/batch/v1beta1/zz_generated.validations.go +++ b/pkg/apis/batch/v1beta1/zz_generated.validations.go @@ -40,33 +40,53 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type CronJob - scheme.AddValidationFunc((*batchv1beta1.CronJob)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_CronJob(ctx, op, nil /* fldPath */, obj.(*batchv1beta1.CronJob), safe.Cast[*batchv1beta1.CronJob](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*batchv1beta1.CronJob)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_CronJob( + ctx, op, nil, /* fldPath */ + obj.(*batchv1beta1.CronJob), + safe.Cast[*batchv1beta1.CronJob](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_CronJob validates an instance of CronJob according // to declarative validation rules in the API schema. -func Validate_CronJob(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *batchv1beta1.CronJob) (errs field.ErrorList) { +func Validate_CronJob( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *batchv1beta1.CronJob) (errs field.ErrorList) { + // field batchv1beta1.CronJob.TypeMeta has no validation // field batchv1beta1.CronJob.ObjectMeta has no validation - // field batchv1beta1.CronJob.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *batchv1beta1.CronJobSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field batchv1beta1.CronJob.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *batchv1beta1.CronJobSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_CronJobSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *batchv1beta1.CronJob) *batchv1beta1.CronJobSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *batchv1beta1.CronJob) *batchv1beta1.CronJobSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field batchv1beta1.CronJob.Status has no validation return errs @@ -74,13 +94,20 @@ func Validate_CronJob(ctx context.Context, op operation.Operation, fldPath *fiel // Validate_CronJobSpec validates an instance of CronJobSpec according // to declarative validation rules in the API schema. -func Validate_CronJobSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *batchv1beta1.CronJobSpec) (errs field.ErrorList) { - // field batchv1beta1.CronJobSpec.Schedule - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_CronJobSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *batchv1beta1.CronJobSpec) (errs field.ErrorList) { + + { // field batchv1beta1.CronJobSpec.Schedule + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -92,7 +119,13 @@ func Validate_CronJobSpec(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } return - }(fldPath.Child("schedule"), &obj.Schedule, safe.Field(oldObj, func(oldObj *batchv1beta1.CronJobSpec) *string { return &oldObj.Schedule }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *batchv1beta1.CronJobSpec) *string { + return &oldObj.Schedule + }) + errs = append(errs, fn(fldPath.Child("schedule"), &obj.Schedule, oldVal, oldObj != nil)...) + } // field batchv1beta1.CronJobSpec.TimeZone has no validation // field batchv1beta1.CronJobSpec.StartingDeadlineSeconds has no validation diff --git a/pkg/apis/certificates/v1/zz_generated.validations.go b/pkg/apis/certificates/v1/zz_generated.validations.go index 691ec59b037..54d31b91fb5 100644 --- a/pkg/apis/certificates/v1/zz_generated.validations.go +++ b/pkg/apis/certificates/v1/zz_generated.validations.go @@ -40,36 +40,54 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type CertificateSigningRequest - scheme.AddValidationFunc((*certificatesv1.CertificateSigningRequest)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/approval", "/status": - return Validate_CertificateSigningRequest(ctx, op, nil /* fldPath */, obj.(*certificatesv1.CertificateSigningRequest), safe.Cast[*certificatesv1.CertificateSigningRequest](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*certificatesv1.CertificateSigningRequest)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/approval", "/status": + return Validate_CertificateSigningRequest( + ctx, op, nil, /* fldPath */ + obj.(*certificatesv1.CertificateSigningRequest), + safe.Cast[*certificatesv1.CertificateSigningRequest](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_CertificateSigningRequest validates an instance of CertificateSigningRequest according // to declarative validation rules in the API schema. -func Validate_CertificateSigningRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *certificatesv1.CertificateSigningRequest) (errs field.ErrorList) { +func Validate_CertificateSigningRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *certificatesv1.CertificateSigningRequest) (errs field.ErrorList) { + // field certificatesv1.CertificateSigningRequest.TypeMeta has no validation // field certificatesv1.CertificateSigningRequest.ObjectMeta has no validation // field certificatesv1.CertificateSigningRequest.Spec has no validation - // field certificatesv1.CertificateSigningRequest.Status - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *certificatesv1.CertificateSigningRequestStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field certificatesv1.CertificateSigningRequest.Status + fn := func( + fldPath *field.Path, + obj, oldObj *certificatesv1.CertificateSigningRequestStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_CertificateSigningRequestStatus(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("status"), &obj.Status, safe.Field(oldObj, func(oldObj *certificatesv1.CertificateSigningRequest) *certificatesv1.CertificateSigningRequestStatus { - return &oldObj.Status - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *certificatesv1.CertificateSigningRequest) *certificatesv1.CertificateSigningRequestStatus { + return &oldObj.Status + }) + errs = append(errs, fn(fldPath.Child("status"), &obj.Status, oldVal, oldObj != nil)...) + } return errs } @@ -78,14 +96,21 @@ var zeroOrOneOfMembershipFor_k8s_io_api_certificates_v1_CertificateSigningReques // Validate_CertificateSigningRequestStatus validates an instance of CertificateSigningRequestStatus according // to declarative validation rules in the API schema. -func Validate_CertificateSigningRequestStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *certificatesv1.CertificateSigningRequestStatus) (errs field.ErrorList) { - // field certificatesv1.CertificateSigningRequestStatus.Conditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []certificatesv1.CertificateSigningRequestCondition, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_CertificateSigningRequestStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *certificatesv1.CertificateSigningRequestStatus) (errs field.ErrorList) { + + { // field certificatesv1.CertificateSigningRequestStatus.Conditions + fn := func( + fldPath *field.Path, + obj, oldObj []certificatesv1.CertificateSigningRequestCondition, + oldValueCorrelated bool) (errs field.ErrorList) { // Uniqueness validation is implemented via custom, handwritten validation // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -95,25 +120,33 @@ func Validate_CertificateSigningRequestStatus(ctx context.Context, op operation. if earlyReturn { return // do not proceed } - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_api_certificates_v1_CertificateSigningRequestStatus_conditions_, func(list []certificatesv1.CertificateSigningRequestCondition) bool { - for i := range list { - if list[i].Type == "Approved" { - return true + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_api_certificates_v1_CertificateSigningRequestStatus_conditions_, + func(list []certificatesv1.CertificateSigningRequestCondition) bool { + for i := range list { + if list[i].Type == "Approved" { + return true + } } - } - return false - }, func(list []certificatesv1.CertificateSigningRequestCondition) bool { - for i := range list { - if list[i].Type == "Denied" { - return true + return false + }, + func(list []certificatesv1.CertificateSigningRequestCondition) bool { + for i := range list { + if list[i].Type == "Denied" { + return true + } } - } - return false - }).MarkAlpha()...) + return false + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("conditions"), obj.Conditions, safe.Field(oldObj, func(oldObj *certificatesv1.CertificateSigningRequestStatus) []certificatesv1.CertificateSigningRequestCondition { - return oldObj.Conditions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *certificatesv1.CertificateSigningRequestStatus) []certificatesv1.CertificateSigningRequestCondition { + return oldObj.Conditions + }) + errs = append(errs, fn(fldPath.Child("conditions"), obj.Conditions, oldVal, oldObj != nil)...) + } // field certificatesv1.CertificateSigningRequestStatus.Certificate has no validation return errs diff --git a/pkg/apis/certificates/v1beta1/zz_generated.validations.go b/pkg/apis/certificates/v1beta1/zz_generated.validations.go index faad9d5a011..84204e863bc 100644 --- a/pkg/apis/certificates/v1beta1/zz_generated.validations.go +++ b/pkg/apis/certificates/v1beta1/zz_generated.validations.go @@ -40,36 +40,54 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type CertificateSigningRequest - scheme.AddValidationFunc((*certificatesv1beta1.CertificateSigningRequest)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/approval", "/status": - return Validate_CertificateSigningRequest(ctx, op, nil /* fldPath */, obj.(*certificatesv1beta1.CertificateSigningRequest), safe.Cast[*certificatesv1beta1.CertificateSigningRequest](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*certificatesv1beta1.CertificateSigningRequest)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/approval", "/status": + return Validate_CertificateSigningRequest( + ctx, op, nil, /* fldPath */ + obj.(*certificatesv1beta1.CertificateSigningRequest), + safe.Cast[*certificatesv1beta1.CertificateSigningRequest](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_CertificateSigningRequest validates an instance of CertificateSigningRequest according // to declarative validation rules in the API schema. -func Validate_CertificateSigningRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *certificatesv1beta1.CertificateSigningRequest) (errs field.ErrorList) { +func Validate_CertificateSigningRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *certificatesv1beta1.CertificateSigningRequest) (errs field.ErrorList) { + // field certificatesv1beta1.CertificateSigningRequest.TypeMeta has no validation // field certificatesv1beta1.CertificateSigningRequest.ObjectMeta has no validation // field certificatesv1beta1.CertificateSigningRequest.Spec has no validation - // field certificatesv1beta1.CertificateSigningRequest.Status - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *certificatesv1beta1.CertificateSigningRequestStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field certificatesv1beta1.CertificateSigningRequest.Status + fn := func( + fldPath *field.Path, + obj, oldObj *certificatesv1beta1.CertificateSigningRequestStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_CertificateSigningRequestStatus(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("status"), &obj.Status, safe.Field(oldObj, func(oldObj *certificatesv1beta1.CertificateSigningRequest) *certificatesv1beta1.CertificateSigningRequestStatus { - return &oldObj.Status - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *certificatesv1beta1.CertificateSigningRequest) *certificatesv1beta1.CertificateSigningRequestStatus { + return &oldObj.Status + }) + errs = append(errs, fn(fldPath.Child("status"), &obj.Status, oldVal, oldObj != nil)...) + } return errs } @@ -78,14 +96,21 @@ var zeroOrOneOfMembershipFor_k8s_io_api_certificates_v1beta1_CertificateSigningR // Validate_CertificateSigningRequestStatus validates an instance of CertificateSigningRequestStatus according // to declarative validation rules in the API schema. -func Validate_CertificateSigningRequestStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *certificatesv1beta1.CertificateSigningRequestStatus) (errs field.ErrorList) { - // field certificatesv1beta1.CertificateSigningRequestStatus.Conditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []certificatesv1beta1.CertificateSigningRequestCondition, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_CertificateSigningRequestStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *certificatesv1beta1.CertificateSigningRequestStatus) (errs field.ErrorList) { + + { // field certificatesv1beta1.CertificateSigningRequestStatus.Conditions + fn := func( + fldPath *field.Path, + obj, oldObj []certificatesv1beta1.CertificateSigningRequestCondition, + oldValueCorrelated bool) (errs field.ErrorList) { // Uniqueness validation is implemented via custom, handwritten validation // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -95,25 +120,33 @@ func Validate_CertificateSigningRequestStatus(ctx context.Context, op operation. if earlyReturn { return // do not proceed } - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_api_certificates_v1beta1_CertificateSigningRequestStatus_conditions_, func(list []certificatesv1beta1.CertificateSigningRequestCondition) bool { - for i := range list { - if list[i].Type == "Approved" { - return true + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_api_certificates_v1beta1_CertificateSigningRequestStatus_conditions_, + func(list []certificatesv1beta1.CertificateSigningRequestCondition) bool { + for i := range list { + if list[i].Type == "Approved" { + return true + } } - } - return false - }, func(list []certificatesv1beta1.CertificateSigningRequestCondition) bool { - for i := range list { - if list[i].Type == "Denied" { - return true + return false + }, + func(list []certificatesv1beta1.CertificateSigningRequestCondition) bool { + for i := range list { + if list[i].Type == "Denied" { + return true + } } - } - return false - }).MarkAlpha()...) + return false + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("conditions"), obj.Conditions, safe.Field(oldObj, func(oldObj *certificatesv1beta1.CertificateSigningRequestStatus) []certificatesv1beta1.CertificateSigningRequestCondition { - return oldObj.Conditions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *certificatesv1beta1.CertificateSigningRequestStatus) []certificatesv1beta1.CertificateSigningRequestCondition { + return oldObj.Conditions + }) + errs = append(errs, fn(fldPath.Child("conditions"), obj.Conditions, oldVal, oldObj != nil)...) + } // field certificatesv1beta1.CertificateSigningRequestStatus.Certificate has no validation return errs diff --git a/pkg/apis/core/v1/zz_generated.validations.go b/pkg/apis/core/v1/zz_generated.validations.go index 650d0226b93..2786f9f4d2b 100644 --- a/pkg/apis/core/v1/zz_generated.validations.go +++ b/pkg/apis/core/v1/zz_generated.validations.go @@ -41,53 +41,87 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type ReplicationController - scheme.AddValidationFunc((*corev1.ReplicationController)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/scale", "/status": - return Validate_ReplicationController(ctx, op, nil /* fldPath */, obj.(*corev1.ReplicationController), safe.Cast[*corev1.ReplicationController](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*corev1.ReplicationController)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/scale", "/status": + return Validate_ReplicationController( + ctx, op, nil, /* fldPath */ + obj.(*corev1.ReplicationController), + safe.Cast[*corev1.ReplicationController](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ReplicationController validates an instance of ReplicationController according // to declarative validation rules in the API schema. -func Validate_ReplicationController(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *corev1.ReplicationController) (errs field.ErrorList) { +func Validate_ReplicationController( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *corev1.ReplicationController) (errs field.ErrorList) { + // field corev1.ReplicationController.TypeMeta has no validation - // field corev1.ReplicationController.ObjectMeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *metav1.ObjectMeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field corev1.ReplicationController.ObjectMeta + fn := func( + fldPath *field.Path, + obj, oldObj *metav1.ObjectMeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort name + func() { // cohort = "name" earlyReturn := false - if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { earlyReturn = true } if earlyReturn { return // do not proceed } - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha()...) + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("metadata"), &obj.ObjectMeta, safe.Field(oldObj, func(oldObj *corev1.ReplicationController) *metav1.ObjectMeta { return &oldObj.ObjectMeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *corev1.ReplicationController) *metav1.ObjectMeta { + return &oldObj.ObjectMeta + }) + errs = append(errs, fn(fldPath.Child("metadata"), &obj.ObjectMeta, oldVal, oldObj != nil)...) + } - // field corev1.ReplicationController.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *corev1.ReplicationControllerSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field corev1.ReplicationController.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *corev1.ReplicationControllerSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ReplicationControllerSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *corev1.ReplicationController) *corev1.ReplicationControllerSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *corev1.ReplicationController) *corev1.ReplicationControllerSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field corev1.ReplicationController.Status has no validation return errs @@ -95,13 +129,20 @@ func Validate_ReplicationController(ctx context.Context, op operation.Operation, // Validate_ReplicationControllerSpec validates an instance of ReplicationControllerSpec according // to declarative validation rules in the API schema. -func Validate_ReplicationControllerSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *corev1.ReplicationControllerSpec) (errs field.ErrorList) { - // field corev1.ReplicationControllerSpec.Replicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ReplicationControllerSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *corev1.ReplicationControllerSpec) (errs field.ErrorList) { + + { // field corev1.ReplicationControllerSpec.Replicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -113,22 +154,42 @@ func Validate_ReplicationControllerSpec(ctx context.Context, op operation.Operat if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("replicas"), obj.Replicas, safe.Field(oldObj, func(oldObj *corev1.ReplicationControllerSpec) *int32 { return oldObj.Replicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *corev1.ReplicationControllerSpec) *int32 { + return oldObj.Replicas + }) + errs = append(errs, fn(fldPath.Child("replicas"), obj.Replicas, oldVal, oldObj != nil)...) + } - // field corev1.ReplicationControllerSpec.MinReadySeconds - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field corev1.ReplicationControllerSpec.MinReadySeconds + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("minReadySeconds"), &obj.MinReadySeconds, safe.Field(oldObj, func(oldObj *corev1.ReplicationControllerSpec) *int32 { return &oldObj.MinReadySeconds }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *corev1.ReplicationControllerSpec) *int32 { + return &oldObj.MinReadySeconds + }) + errs = append(errs, fn(fldPath.Child("minReadySeconds"), &obj.MinReadySeconds, oldVal, oldObj != nil)...) + } // field corev1.ReplicationControllerSpec.Selector has no validation // field corev1.ReplicationControllerSpec.Template has no validation diff --git a/pkg/apis/discovery/v1/zz_generated.validations.go b/pkg/apis/discovery/v1/zz_generated.validations.go index ec77329c9d7..d873908f623 100644 --- a/pkg/apis/discovery/v1/zz_generated.validations.go +++ b/pkg/apis/discovery/v1/zz_generated.validations.go @@ -41,13 +41,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type EndpointSlice - scheme.AddValidationFunc((*discoveryv1.EndpointSlice)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_EndpointSlice(ctx, op, nil /* fldPath */, obj.(*discoveryv1.EndpointSlice), safe.Cast[*discoveryv1.EndpointSlice](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*discoveryv1.EndpointSlice)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_EndpointSlice( + ctx, op, nil, /* fldPath */ + obj.(*discoveryv1.EndpointSlice), + safe.Cast[*discoveryv1.EndpointSlice](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -55,21 +62,33 @@ var symbolsForAddressType = sets.New(discoveryv1.AddressTypeFQDN, discoveryv1.Ad // Validate_AddressType validates an instance of AddressType according // to declarative validation rules in the API schema. -func Validate_AddressType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *discoveryv1.AddressType) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAddressType, nil).MarkAlpha()...) +func Validate_AddressType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *discoveryv1.AddressType) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAddressType, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Endpoint validates an instance of Endpoint according // to declarative validation rules in the API schema. -func Validate_Endpoint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *discoveryv1.Endpoint) (errs field.ErrorList) { - // field discoveryv1.Endpoint.Addresses - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_Endpoint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *discoveryv1.Endpoint) (errs field.ErrorList) { + + { // field discoveryv1.Endpoint.Addresses + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -85,7 +104,13 @@ func Validate_Endpoint(ctx context.Context, op operation.Operation, fldPath *fie return // do not proceed } return - }(fldPath.Child("addresses"), obj.Addresses, safe.Field(oldObj, func(oldObj *discoveryv1.Endpoint) []string { return oldObj.Addresses }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *discoveryv1.Endpoint) []string { + return oldObj.Addresses + }) + errs = append(errs, fn(fldPath.Child("addresses"), obj.Addresses, oldVal, oldObj != nil)...) + } // field discoveryv1.Endpoint.Conditions has no validation // field discoveryv1.Endpoint.Hostname has no validation @@ -99,16 +124,23 @@ func Validate_Endpoint(ctx context.Context, op operation.Operation, fldPath *fie // Validate_EndpointSlice validates an instance of EndpointSlice according // to declarative validation rules in the API schema. -func Validate_EndpointSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *discoveryv1.EndpointSlice) (errs field.ErrorList) { +func Validate_EndpointSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *discoveryv1.EndpointSlice) (errs field.ErrorList) { + // field discoveryv1.EndpointSlice.TypeMeta has no validation // field discoveryv1.EndpointSlice.ObjectMeta has no validation - // field discoveryv1.EndpointSlice.AddressType - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *discoveryv1.AddressType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field discoveryv1.EndpointSlice.AddressType + fn := func( + fldPath *field.Path, + obj, oldObj *discoveryv1.AddressType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -126,14 +158,24 @@ func Validate_EndpointSlice(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_AddressType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("addressType"), &obj.AddressType, safe.Field(oldObj, func(oldObj *discoveryv1.EndpointSlice) *discoveryv1.AddressType { return &oldObj.AddressType }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *discoveryv1.EndpointSlice) *discoveryv1.AddressType { + return &oldObj.AddressType + }) + errs = append(errs, fn(fldPath.Child("addressType"), &obj.AddressType, oldVal, oldObj != nil)...) + } - // field discoveryv1.EndpointSlice.Endpoints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []discoveryv1.Endpoint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field discoveryv1.EndpointSlice.Endpoints + fn := func( + fldPath *field.Path, + obj, oldObj []discoveryv1.Endpoint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -144,9 +186,17 @@ func Validate_EndpointSlice(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Endpoint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Endpoint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("endpoints"), obj.Endpoints, safe.Field(oldObj, func(oldObj *discoveryv1.EndpointSlice) []discoveryv1.Endpoint { return oldObj.Endpoints }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *discoveryv1.EndpointSlice) []discoveryv1.Endpoint { + return oldObj.Endpoints + }) + errs = append(errs, fn(fldPath.Child("endpoints"), obj.Endpoints, oldVal, oldObj != nil)...) + } // field discoveryv1.EndpointSlice.Ports has no validation return errs diff --git a/pkg/apis/discovery/v1beta1/zz_generated.validations.go b/pkg/apis/discovery/v1beta1/zz_generated.validations.go index 312ab51fba5..b303dab080c 100644 --- a/pkg/apis/discovery/v1beta1/zz_generated.validations.go +++ b/pkg/apis/discovery/v1beta1/zz_generated.validations.go @@ -41,13 +41,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type EndpointSlice - scheme.AddValidationFunc((*discoveryv1beta1.EndpointSlice)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_EndpointSlice(ctx, op, nil /* fldPath */, obj.(*discoveryv1beta1.EndpointSlice), safe.Cast[*discoveryv1beta1.EndpointSlice](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*discoveryv1beta1.EndpointSlice)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_EndpointSlice( + ctx, op, nil, /* fldPath */ + obj.(*discoveryv1beta1.EndpointSlice), + safe.Cast[*discoveryv1beta1.EndpointSlice](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -55,21 +62,33 @@ var symbolsForAddressType = sets.New(discoveryv1beta1.AddressTypeFQDN, discovery // Validate_AddressType validates an instance of AddressType according // to declarative validation rules in the API schema. -func Validate_AddressType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *discoveryv1beta1.AddressType) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAddressType, nil).MarkAlpha()...) +func Validate_AddressType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *discoveryv1beta1.AddressType) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAddressType, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Endpoint validates an instance of Endpoint according // to declarative validation rules in the API schema. -func Validate_Endpoint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *discoveryv1beta1.Endpoint) (errs field.ErrorList) { - // field discoveryv1beta1.Endpoint.Addresses - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_Endpoint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *discoveryv1beta1.Endpoint) (errs field.ErrorList) { + + { // field discoveryv1beta1.Endpoint.Addresses + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -85,7 +104,13 @@ func Validate_Endpoint(ctx context.Context, op operation.Operation, fldPath *fie return // do not proceed } return - }(fldPath.Child("addresses"), obj.Addresses, safe.Field(oldObj, func(oldObj *discoveryv1beta1.Endpoint) []string { return oldObj.Addresses }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *discoveryv1beta1.Endpoint) []string { + return oldObj.Addresses + }) + errs = append(errs, fn(fldPath.Child("addresses"), obj.Addresses, oldVal, oldObj != nil)...) + } // field discoveryv1beta1.Endpoint.Conditions has no validation // field discoveryv1beta1.Endpoint.Hostname has no validation @@ -98,16 +123,23 @@ func Validate_Endpoint(ctx context.Context, op operation.Operation, fldPath *fie // Validate_EndpointSlice validates an instance of EndpointSlice according // to declarative validation rules in the API schema. -func Validate_EndpointSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *discoveryv1beta1.EndpointSlice) (errs field.ErrorList) { +func Validate_EndpointSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *discoveryv1beta1.EndpointSlice) (errs field.ErrorList) { + // field discoveryv1beta1.EndpointSlice.TypeMeta has no validation // field discoveryv1beta1.EndpointSlice.ObjectMeta has no validation - // field discoveryv1beta1.EndpointSlice.AddressType - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *discoveryv1beta1.AddressType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field discoveryv1beta1.EndpointSlice.AddressType + fn := func( + fldPath *field.Path, + obj, oldObj *discoveryv1beta1.AddressType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -125,14 +157,24 @@ func Validate_EndpointSlice(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_AddressType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("addressType"), &obj.AddressType, safe.Field(oldObj, func(oldObj *discoveryv1beta1.EndpointSlice) *discoveryv1beta1.AddressType { return &oldObj.AddressType }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *discoveryv1beta1.EndpointSlice) *discoveryv1beta1.AddressType { + return &oldObj.AddressType + }) + errs = append(errs, fn(fldPath.Child("addressType"), &obj.AddressType, oldVal, oldObj != nil)...) + } - // field discoveryv1beta1.EndpointSlice.Endpoints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []discoveryv1beta1.Endpoint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field discoveryv1beta1.EndpointSlice.Endpoints + fn := func( + fldPath *field.Path, + obj, oldObj []discoveryv1beta1.Endpoint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -143,9 +185,17 @@ func Validate_EndpointSlice(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Endpoint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Endpoint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("endpoints"), obj.Endpoints, safe.Field(oldObj, func(oldObj *discoveryv1beta1.EndpointSlice) []discoveryv1beta1.Endpoint { return oldObj.Endpoints }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *discoveryv1beta1.EndpointSlice) []discoveryv1beta1.Endpoint { + return oldObj.Endpoints + }) + errs = append(errs, fn(fldPath.Child("endpoints"), obj.Endpoints, oldVal, oldObj != nil)...) + } // field discoveryv1beta1.EndpointSlice.Ports has no validation return errs diff --git a/pkg/apis/flowcontrol/v1/zz_generated.validations.go b/pkg/apis/flowcontrol/v1/zz_generated.validations.go index 5cb5778e886..3857dc79c85 100644 --- a/pkg/apis/flowcontrol/v1/zz_generated.validations.go +++ b/pkg/apis/flowcontrol/v1/zz_generated.validations.go @@ -40,45 +40,68 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type PriorityLevelConfiguration - scheme.AddValidationFunc((*flowcontrolv1.PriorityLevelConfiguration)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_PriorityLevelConfiguration(ctx, op, nil /* fldPath */, obj.(*flowcontrolv1.PriorityLevelConfiguration), safe.Cast[*flowcontrolv1.PriorityLevelConfiguration](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*flowcontrolv1.PriorityLevelConfiguration)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_PriorityLevelConfiguration( + ctx, op, nil, /* fldPath */ + obj.(*flowcontrolv1.PriorityLevelConfiguration), + safe.Cast[*flowcontrolv1.PriorityLevelConfiguration](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LimitResponse validates an instance of LimitResponse according // to declarative validation rules in the API schema. -func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitResponse) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", func(obj *flowcontrolv1.LimitResponse) *flowcontrolv1.QueuingConfiguration { return obj.Queuing }, func(obj *flowcontrolv1.LimitResponse) flowcontrolv1.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1.QueuingConfiguration, flowcontrolv1.LimitResponseType]{ - { - Value: "Queue", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_LimitResponse( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1.LimitResponse) (errs field.ErrorList) { - // field flowcontrolv1.LimitResponse.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitResponseType, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", + func(obj *flowcontrolv1.LimitResponse) *flowcontrolv1.QueuingConfiguration { return obj.Queuing }, + func(obj *flowcontrolv1.LimitResponse) flowcontrolv1.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1.QueuingConfiguration, flowcontrolv1.LimitResponseType]{ + + { + Value: "Queue", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1.LimitResponse.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1.LimitResponseType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -90,14 +113,24 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1.LimitResponse) *flowcontrolv1.LimitResponseType { return &oldObj.Type }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1.LimitResponse) *flowcontrolv1.LimitResponseType { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1.LimitResponse.Queuing - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1.QueuingConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1.LimitResponse.Queuing + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1.QueuingConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -108,29 +141,46 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("queuing"), obj.Queuing, safe.Field(oldObj, func(oldObj *flowcontrolv1.LimitResponse) *flowcontrolv1.QueuingConfiguration { return oldObj.Queuing }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1.LimitResponse) *flowcontrolv1.QueuingConfiguration { + return oldObj.Queuing + }) + errs = append(errs, fn(fldPath.Child("queuing"), obj.Queuing, oldVal, oldObj != nil)...) + } return errs } // Validate_LimitedPriorityLevelConfiguration validates an instance of LimitedPriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_LimitedPriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1.LimitedPriorityLevelConfiguration.NominalConcurrencyShares has no validation - // field flowcontrolv1.LimitedPriorityLevelConfiguration.LimitResponse - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitResponse, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1.LimitedPriorityLevelConfiguration.LimitResponse + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1.LimitResponse, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LimitResponse(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limitResponse"), &obj.LimitResponse, safe.Field(oldObj, func(oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) *flowcontrolv1.LimitResponse { - return &oldObj.LimitResponse - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) *flowcontrolv1.LimitResponse { + return &oldObj.LimitResponse + }) + errs = append(errs, fn(fldPath.Child("limitResponse"), &obj.LimitResponse, oldVal, oldObj != nil)...) + } // field flowcontrolv1.LimitedPriorityLevelConfiguration.LendablePercent has no validation // field flowcontrolv1.LimitedPriorityLevelConfiguration.BorrowingLimitPercent has no validation @@ -139,23 +189,34 @@ func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operatio // Validate_PriorityLevelConfiguration validates an instance of PriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.PriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_PriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1.PriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1.PriorityLevelConfiguration.TypeMeta has no validation // field flowcontrolv1.PriorityLevelConfiguration.ObjectMeta has no validation - // field flowcontrolv1.PriorityLevelConfiguration.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1.PriorityLevelConfigurationSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1.PriorityLevelConfiguration.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1.PriorityLevelConfigurationSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_PriorityLevelConfigurationSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *flowcontrolv1.PriorityLevelConfiguration) *flowcontrolv1.PriorityLevelConfigurationSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1.PriorityLevelConfiguration) *flowcontrolv1.PriorityLevelConfigurationSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field flowcontrolv1.PriorityLevelConfiguration.Status has no validation return errs @@ -163,59 +224,84 @@ func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Opera // Validate_PriorityLevelConfigurationSpec validates an instance of PriorityLevelConfigurationSpec according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.ExemptPriorityLevelConfiguration { - return obj.Exempt - }, func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) flowcontrolv1.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1.ExemptPriorityLevelConfiguration, flowcontrolv1.PriorityLevelEnablement]{ - { - Value: "Exempt", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.LimitedPriorityLevelConfiguration { - return obj.Limited - }, func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) flowcontrolv1.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1.LimitedPriorityLevelConfiguration, flowcontrolv1.PriorityLevelEnablement]{ - { - Value: "Limited", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_PriorityLevelConfigurationSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - // field flowcontrolv1.PriorityLevelConfigurationSpec.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1.PriorityLevelEnablement, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", + func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.ExemptPriorityLevelConfiguration { + return obj.Exempt + }, + func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) flowcontrolv1.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1.ExemptPriorityLevelConfiguration, flowcontrolv1.PriorityLevelEnablement]{ + + { + Value: "Exempt", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", + func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.LimitedPriorityLevelConfiguration { + return obj.Limited + }, + func(obj *flowcontrolv1.PriorityLevelConfigurationSpec) flowcontrolv1.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1.LimitedPriorityLevelConfiguration, flowcontrolv1.PriorityLevelEnablement]{ + + { + Value: "Limited", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1.PriorityLevelConfigurationSpec.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1.PriorityLevelEnablement, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -227,16 +313,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.PriorityLevelEnablement { - return &oldObj.Type - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.PriorityLevelEnablement { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1.PriorityLevelConfigurationSpec.Limited - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1.PriorityLevelConfigurationSpec.Limited + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1.LimitedPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -249,16 +343,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O // call the type's validation function errs = append(errs, Validate_LimitedPriorityLevelConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limited"), obj.Limited, safe.Field(oldObj, func(oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.LimitedPriorityLevelConfiguration { - return oldObj.Limited - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.LimitedPriorityLevelConfiguration { + return oldObj.Limited + }) + errs = append(errs, fn(fldPath.Child("limited"), obj.Limited, oldVal, oldObj != nil)...) + } - // field flowcontrolv1.PriorityLevelConfigurationSpec.Exempt - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1.ExemptPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1.PriorityLevelConfigurationSpec.Exempt + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1.ExemptPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -269,9 +371,13 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("exempt"), obj.Exempt, safe.Field(oldObj, func(oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.ExemptPriorityLevelConfiguration { - return oldObj.Exempt - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1.PriorityLevelConfigurationSpec) *flowcontrolv1.ExemptPriorityLevelConfiguration { + return oldObj.Exempt + }) + errs = append(errs, fn(fldPath.Child("exempt"), obj.Exempt, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/flowcontrol/v1beta1/zz_generated.validations.go b/pkg/apis/flowcontrol/v1beta1/zz_generated.validations.go index 4fc4c9cc1dd..da59aa4e13a 100644 --- a/pkg/apis/flowcontrol/v1beta1/zz_generated.validations.go +++ b/pkg/apis/flowcontrol/v1beta1/zz_generated.validations.go @@ -40,47 +40,70 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type PriorityLevelConfiguration - scheme.AddValidationFunc((*flowcontrolv1beta1.PriorityLevelConfiguration)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_PriorityLevelConfiguration(ctx, op, nil /* fldPath */, obj.(*flowcontrolv1beta1.PriorityLevelConfiguration), safe.Cast[*flowcontrolv1beta1.PriorityLevelConfiguration](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*flowcontrolv1beta1.PriorityLevelConfiguration)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_PriorityLevelConfiguration( + ctx, op, nil, /* fldPath */ + obj.(*flowcontrolv1beta1.PriorityLevelConfiguration), + safe.Cast[*flowcontrolv1beta1.PriorityLevelConfiguration](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LimitResponse validates an instance of LimitResponse according // to declarative validation rules in the API schema. -func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitResponse) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", func(obj *flowcontrolv1beta1.LimitResponse) *flowcontrolv1beta1.QueuingConfiguration { - return obj.Queuing - }, func(obj *flowcontrolv1beta1.LimitResponse) flowcontrolv1beta1.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta1.QueuingConfiguration, flowcontrolv1beta1.LimitResponseType]{ - { - Value: "Queue", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_LimitResponse( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.LimitResponse) (errs field.ErrorList) { - // field flowcontrolv1beta1.LimitResponse.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitResponseType, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", + func(obj *flowcontrolv1beta1.LimitResponse) *flowcontrolv1beta1.QueuingConfiguration { + return obj.Queuing + }, + func(obj *flowcontrolv1beta1.LimitResponse) flowcontrolv1beta1.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta1.QueuingConfiguration, flowcontrolv1beta1.LimitResponseType]{ + + { + Value: "Queue", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1beta1.LimitResponse.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.LimitResponseType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -92,16 +115,24 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1beta1.LimitResponse) *flowcontrolv1beta1.LimitResponseType { - return &oldObj.Type - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta1.LimitResponse) *flowcontrolv1beta1.LimitResponseType { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta1.LimitResponse.Queuing - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.QueuingConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta1.LimitResponse.Queuing + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.QueuingConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -112,31 +143,46 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("queuing"), obj.Queuing, safe.Field(oldObj, func(oldObj *flowcontrolv1beta1.LimitResponse) *flowcontrolv1beta1.QueuingConfiguration { - return oldObj.Queuing - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta1.LimitResponse) *flowcontrolv1beta1.QueuingConfiguration { + return oldObj.Queuing + }) + errs = append(errs, fn(fldPath.Child("queuing"), obj.Queuing, oldVal, oldObj != nil)...) + } return errs } // Validate_LimitedPriorityLevelConfiguration validates an instance of LimitedPriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_LimitedPriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1beta1.LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has no validation - // field flowcontrolv1beta1.LimitedPriorityLevelConfiguration.LimitResponse - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitResponse, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta1.LimitedPriorityLevelConfiguration.LimitResponse + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.LimitResponse, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LimitResponse(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limitResponse"), &obj.LimitResponse, safe.Field(oldObj, func(oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) *flowcontrolv1beta1.LimitResponse { - return &oldObj.LimitResponse - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) *flowcontrolv1beta1.LimitResponse { + return &oldObj.LimitResponse + }) + errs = append(errs, fn(fldPath.Child("limitResponse"), &obj.LimitResponse, oldVal, oldObj != nil)...) + } // field flowcontrolv1beta1.LimitedPriorityLevelConfiguration.LendablePercent has no validation // field flowcontrolv1beta1.LimitedPriorityLevelConfiguration.BorrowingLimitPercent has no validation @@ -145,23 +191,34 @@ func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operatio // Validate_PriorityLevelConfiguration validates an instance of PriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.PriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_PriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.PriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1beta1.PriorityLevelConfiguration.TypeMeta has no validation // field flowcontrolv1beta1.PriorityLevelConfiguration.ObjectMeta has no validation - // field flowcontrolv1beta1.PriorityLevelConfiguration.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta1.PriorityLevelConfiguration.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_PriorityLevelConfigurationSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *flowcontrolv1beta1.PriorityLevelConfiguration) *flowcontrolv1beta1.PriorityLevelConfigurationSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta1.PriorityLevelConfiguration) *flowcontrolv1beta1.PriorityLevelConfigurationSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field flowcontrolv1beta1.PriorityLevelConfiguration.Status has no validation return errs @@ -169,59 +226,84 @@ func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Opera // Validate_PriorityLevelConfigurationSpec validates an instance of PriorityLevelConfigurationSpec according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.ExemptPriorityLevelConfiguration { - return obj.Exempt - }, func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) flowcontrolv1beta1.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta1.ExemptPriorityLevelConfiguration, flowcontrolv1beta1.PriorityLevelEnablement]{ - { - Value: "Exempt", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.LimitedPriorityLevelConfiguration { - return obj.Limited - }, func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) flowcontrolv1beta1.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta1.LimitedPriorityLevelConfiguration, flowcontrolv1beta1.PriorityLevelEnablement]{ - { - Value: "Limited", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_PriorityLevelConfigurationSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - // field flowcontrolv1beta1.PriorityLevelConfigurationSpec.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.PriorityLevelEnablement, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", + func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.ExemptPriorityLevelConfiguration { + return obj.Exempt + }, + func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) flowcontrolv1beta1.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta1.ExemptPriorityLevelConfiguration, flowcontrolv1beta1.PriorityLevelEnablement]{ + + { + Value: "Exempt", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", + func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.LimitedPriorityLevelConfiguration { + return obj.Limited + }, + func(obj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) flowcontrolv1beta1.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta1.LimitedPriorityLevelConfiguration, flowcontrolv1beta1.PriorityLevelEnablement]{ + + { + Value: "Limited", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1beta1.PriorityLevelConfigurationSpec.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.PriorityLevelEnablement, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -233,16 +315,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.PriorityLevelEnablement { - return &oldObj.Type - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.PriorityLevelEnablement { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta1.PriorityLevelConfigurationSpec.Limited - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta1.PriorityLevelConfigurationSpec.Limited + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.LimitedPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -255,16 +345,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O // call the type's validation function errs = append(errs, Validate_LimitedPriorityLevelConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limited"), obj.Limited, safe.Field(oldObj, func(oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.LimitedPriorityLevelConfiguration { - return oldObj.Limited - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.LimitedPriorityLevelConfiguration { + return oldObj.Limited + }) + errs = append(errs, fn(fldPath.Child("limited"), obj.Limited, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta1.PriorityLevelConfigurationSpec.Exempt - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta1.ExemptPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta1.PriorityLevelConfigurationSpec.Exempt + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta1.ExemptPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -275,9 +373,13 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("exempt"), obj.Exempt, safe.Field(oldObj, func(oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.ExemptPriorityLevelConfiguration { - return oldObj.Exempt - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta1.PriorityLevelConfigurationSpec) *flowcontrolv1beta1.ExemptPriorityLevelConfiguration { + return oldObj.Exempt + }) + errs = append(errs, fn(fldPath.Child("exempt"), obj.Exempt, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/flowcontrol/v1beta2/zz_generated.validations.go b/pkg/apis/flowcontrol/v1beta2/zz_generated.validations.go index 90d62c636cd..8bcddcd746c 100644 --- a/pkg/apis/flowcontrol/v1beta2/zz_generated.validations.go +++ b/pkg/apis/flowcontrol/v1beta2/zz_generated.validations.go @@ -40,47 +40,70 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type PriorityLevelConfiguration - scheme.AddValidationFunc((*flowcontrolv1beta2.PriorityLevelConfiguration)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_PriorityLevelConfiguration(ctx, op, nil /* fldPath */, obj.(*flowcontrolv1beta2.PriorityLevelConfiguration), safe.Cast[*flowcontrolv1beta2.PriorityLevelConfiguration](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*flowcontrolv1beta2.PriorityLevelConfiguration)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_PriorityLevelConfiguration( + ctx, op, nil, /* fldPath */ + obj.(*flowcontrolv1beta2.PriorityLevelConfiguration), + safe.Cast[*flowcontrolv1beta2.PriorityLevelConfiguration](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LimitResponse validates an instance of LimitResponse according // to declarative validation rules in the API schema. -func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitResponse) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", func(obj *flowcontrolv1beta2.LimitResponse) *flowcontrolv1beta2.QueuingConfiguration { - return obj.Queuing - }, func(obj *flowcontrolv1beta2.LimitResponse) flowcontrolv1beta2.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta2.QueuingConfiguration, flowcontrolv1beta2.LimitResponseType]{ - { - Value: "Queue", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_LimitResponse( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.LimitResponse) (errs field.ErrorList) { - // field flowcontrolv1beta2.LimitResponse.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitResponseType, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", + func(obj *flowcontrolv1beta2.LimitResponse) *flowcontrolv1beta2.QueuingConfiguration { + return obj.Queuing + }, + func(obj *flowcontrolv1beta2.LimitResponse) flowcontrolv1beta2.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta2.QueuingConfiguration, flowcontrolv1beta2.LimitResponseType]{ + + { + Value: "Queue", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1beta2.LimitResponse.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.LimitResponseType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -92,16 +115,24 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1beta2.LimitResponse) *flowcontrolv1beta2.LimitResponseType { - return &oldObj.Type - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta2.LimitResponse) *flowcontrolv1beta2.LimitResponseType { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta2.LimitResponse.Queuing - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.QueuingConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta2.LimitResponse.Queuing + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.QueuingConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -112,31 +143,46 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("queuing"), obj.Queuing, safe.Field(oldObj, func(oldObj *flowcontrolv1beta2.LimitResponse) *flowcontrolv1beta2.QueuingConfiguration { - return oldObj.Queuing - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta2.LimitResponse) *flowcontrolv1beta2.QueuingConfiguration { + return oldObj.Queuing + }) + errs = append(errs, fn(fldPath.Child("queuing"), obj.Queuing, oldVal, oldObj != nil)...) + } return errs } // Validate_LimitedPriorityLevelConfiguration validates an instance of LimitedPriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_LimitedPriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1beta2.LimitedPriorityLevelConfiguration.AssuredConcurrencyShares has no validation - // field flowcontrolv1beta2.LimitedPriorityLevelConfiguration.LimitResponse - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitResponse, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta2.LimitedPriorityLevelConfiguration.LimitResponse + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.LimitResponse, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LimitResponse(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limitResponse"), &obj.LimitResponse, safe.Field(oldObj, func(oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) *flowcontrolv1beta2.LimitResponse { - return &oldObj.LimitResponse - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) *flowcontrolv1beta2.LimitResponse { + return &oldObj.LimitResponse + }) + errs = append(errs, fn(fldPath.Child("limitResponse"), &obj.LimitResponse, oldVal, oldObj != nil)...) + } // field flowcontrolv1beta2.LimitedPriorityLevelConfiguration.LendablePercent has no validation // field flowcontrolv1beta2.LimitedPriorityLevelConfiguration.BorrowingLimitPercent has no validation @@ -145,23 +191,34 @@ func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operatio // Validate_PriorityLevelConfiguration validates an instance of PriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.PriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_PriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.PriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1beta2.PriorityLevelConfiguration.TypeMeta has no validation // field flowcontrolv1beta2.PriorityLevelConfiguration.ObjectMeta has no validation - // field flowcontrolv1beta2.PriorityLevelConfiguration.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta2.PriorityLevelConfiguration.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_PriorityLevelConfigurationSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *flowcontrolv1beta2.PriorityLevelConfiguration) *flowcontrolv1beta2.PriorityLevelConfigurationSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta2.PriorityLevelConfiguration) *flowcontrolv1beta2.PriorityLevelConfigurationSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field flowcontrolv1beta2.PriorityLevelConfiguration.Status has no validation return errs @@ -169,59 +226,84 @@ func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Opera // Validate_PriorityLevelConfigurationSpec validates an instance of PriorityLevelConfigurationSpec according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.ExemptPriorityLevelConfiguration { - return obj.Exempt - }, func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) flowcontrolv1beta2.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta2.ExemptPriorityLevelConfiguration, flowcontrolv1beta2.PriorityLevelEnablement]{ - { - Value: "Exempt", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.LimitedPriorityLevelConfiguration { - return obj.Limited - }, func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) flowcontrolv1beta2.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta2.LimitedPriorityLevelConfiguration, flowcontrolv1beta2.PriorityLevelEnablement]{ - { - Value: "Limited", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_PriorityLevelConfigurationSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - // field flowcontrolv1beta2.PriorityLevelConfigurationSpec.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.PriorityLevelEnablement, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", + func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.ExemptPriorityLevelConfiguration { + return obj.Exempt + }, + func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) flowcontrolv1beta2.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta2.ExemptPriorityLevelConfiguration, flowcontrolv1beta2.PriorityLevelEnablement]{ + + { + Value: "Exempt", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", + func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.LimitedPriorityLevelConfiguration { + return obj.Limited + }, + func(obj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) flowcontrolv1beta2.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta2.LimitedPriorityLevelConfiguration, flowcontrolv1beta2.PriorityLevelEnablement]{ + + { + Value: "Limited", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1beta2.PriorityLevelConfigurationSpec.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.PriorityLevelEnablement, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -233,16 +315,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.PriorityLevelEnablement { - return &oldObj.Type - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.PriorityLevelEnablement { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta2.PriorityLevelConfigurationSpec.Limited - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta2.PriorityLevelConfigurationSpec.Limited + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.LimitedPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -255,16 +345,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O // call the type's validation function errs = append(errs, Validate_LimitedPriorityLevelConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limited"), obj.Limited, safe.Field(oldObj, func(oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.LimitedPriorityLevelConfiguration { - return oldObj.Limited - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.LimitedPriorityLevelConfiguration { + return oldObj.Limited + }) + errs = append(errs, fn(fldPath.Child("limited"), obj.Limited, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta2.PriorityLevelConfigurationSpec.Exempt - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta2.ExemptPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta2.PriorityLevelConfigurationSpec.Exempt + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta2.ExemptPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -275,9 +373,13 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("exempt"), obj.Exempt, safe.Field(oldObj, func(oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.ExemptPriorityLevelConfiguration { - return oldObj.Exempt - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta2.PriorityLevelConfigurationSpec) *flowcontrolv1beta2.ExemptPriorityLevelConfiguration { + return oldObj.Exempt + }) + errs = append(errs, fn(fldPath.Child("exempt"), obj.Exempt, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/flowcontrol/v1beta3/zz_generated.validations.go b/pkg/apis/flowcontrol/v1beta3/zz_generated.validations.go index 7eedaf2ec09..605f4590133 100644 --- a/pkg/apis/flowcontrol/v1beta3/zz_generated.validations.go +++ b/pkg/apis/flowcontrol/v1beta3/zz_generated.validations.go @@ -40,47 +40,70 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type PriorityLevelConfiguration - scheme.AddValidationFunc((*flowcontrolv1beta3.PriorityLevelConfiguration)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_PriorityLevelConfiguration(ctx, op, nil /* fldPath */, obj.(*flowcontrolv1beta3.PriorityLevelConfiguration), safe.Cast[*flowcontrolv1beta3.PriorityLevelConfiguration](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*flowcontrolv1beta3.PriorityLevelConfiguration)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_PriorityLevelConfiguration( + ctx, op, nil, /* fldPath */ + obj.(*flowcontrolv1beta3.PriorityLevelConfiguration), + safe.Cast[*flowcontrolv1beta3.PriorityLevelConfiguration](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LimitResponse validates an instance of LimitResponse according // to declarative validation rules in the API schema. -func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitResponse) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", func(obj *flowcontrolv1beta3.LimitResponse) *flowcontrolv1beta3.QueuingConfiguration { - return obj.Queuing - }, func(obj *flowcontrolv1beta3.LimitResponse) flowcontrolv1beta3.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta3.QueuingConfiguration, flowcontrolv1beta3.LimitResponseType]{ - { - Value: "Queue", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.QueuingConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_LimitResponse( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.LimitResponse) (errs field.ErrorList) { - // field flowcontrolv1beta3.LimitResponse.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitResponseType, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "queuing", + func(obj *flowcontrolv1beta3.LimitResponse) *flowcontrolv1beta3.QueuingConfiguration { + return obj.Queuing + }, + func(obj *flowcontrolv1beta3.LimitResponse) flowcontrolv1beta3.LimitResponseType { return obj.Type }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta3.QueuingConfiguration, flowcontrolv1beta3.LimitResponseType]{ + + { + Value: "Queue", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.QueuingConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1beta3.LimitResponse.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.LimitResponseType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -92,16 +115,24 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1beta3.LimitResponse) *flowcontrolv1beta3.LimitResponseType { - return &oldObj.Type - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta3.LimitResponse) *flowcontrolv1beta3.LimitResponseType { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta3.LimitResponse.Queuing - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.QueuingConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta3.LimitResponse.Queuing + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.QueuingConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -112,31 +143,46 @@ func Validate_LimitResponse(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("queuing"), obj.Queuing, safe.Field(oldObj, func(oldObj *flowcontrolv1beta3.LimitResponse) *flowcontrolv1beta3.QueuingConfiguration { - return oldObj.Queuing - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta3.LimitResponse) *flowcontrolv1beta3.QueuingConfiguration { + return oldObj.Queuing + }) + errs = append(errs, fn(fldPath.Child("queuing"), obj.Queuing, oldVal, oldObj != nil)...) + } return errs } // Validate_LimitedPriorityLevelConfiguration validates an instance of LimitedPriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_LimitedPriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1beta3.LimitedPriorityLevelConfiguration.NominalConcurrencyShares has no validation - // field flowcontrolv1beta3.LimitedPriorityLevelConfiguration.LimitResponse - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitResponse, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta3.LimitedPriorityLevelConfiguration.LimitResponse + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.LimitResponse, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LimitResponse(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limitResponse"), &obj.LimitResponse, safe.Field(oldObj, func(oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) *flowcontrolv1beta3.LimitResponse { - return &oldObj.LimitResponse - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) *flowcontrolv1beta3.LimitResponse { + return &oldObj.LimitResponse + }) + errs = append(errs, fn(fldPath.Child("limitResponse"), &obj.LimitResponse, oldVal, oldObj != nil)...) + } // field flowcontrolv1beta3.LimitedPriorityLevelConfiguration.LendablePercent has no validation // field flowcontrolv1beta3.LimitedPriorityLevelConfiguration.BorrowingLimitPercent has no validation @@ -145,23 +191,34 @@ func Validate_LimitedPriorityLevelConfiguration(ctx context.Context, op operatio // Validate_PriorityLevelConfiguration validates an instance of PriorityLevelConfiguration according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.PriorityLevelConfiguration) (errs field.ErrorList) { +func Validate_PriorityLevelConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.PriorityLevelConfiguration) (errs field.ErrorList) { + // field flowcontrolv1beta3.PriorityLevelConfiguration.TypeMeta has no validation // field flowcontrolv1beta3.PriorityLevelConfiguration.ObjectMeta has no validation - // field flowcontrolv1beta3.PriorityLevelConfiguration.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta3.PriorityLevelConfiguration.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_PriorityLevelConfigurationSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *flowcontrolv1beta3.PriorityLevelConfiguration) *flowcontrolv1beta3.PriorityLevelConfigurationSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta3.PriorityLevelConfiguration) *flowcontrolv1beta3.PriorityLevelConfigurationSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field flowcontrolv1beta3.PriorityLevelConfiguration.Status has no validation return errs @@ -169,59 +226,84 @@ func Validate_PriorityLevelConfiguration(ctx context.Context, op operation.Opera // Validate_PriorityLevelConfigurationSpec validates an instance of PriorityLevelConfigurationSpec according // to declarative validation rules in the API schema. -func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.ExemptPriorityLevelConfiguration { - return obj.Exempt - }, func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) flowcontrolv1beta3.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta3.ExemptPriorityLevelConfiguration, flowcontrolv1beta3.PriorityLevelEnablement]{ - { - Value: "Exempt", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.ExemptPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.LimitedPriorityLevelConfiguration { - return obj.Limited - }, func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) flowcontrolv1beta3.PriorityLevelEnablement { - return obj.Type - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*flowcontrolv1beta3.LimitedPriorityLevelConfiguration, flowcontrolv1beta3.PriorityLevelEnablement]{ - { - Value: "Limited", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return errs - } - return errs - }}, - })...) +func Validate_PriorityLevelConfigurationSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) (errs field.ErrorList) { - // field flowcontrolv1beta3.PriorityLevelConfigurationSpec.Type - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.PriorityLevelEnablement, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "exempt", + func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.ExemptPriorityLevelConfiguration { + return obj.Exempt + }, + func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) flowcontrolv1beta3.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta3.ExemptPriorityLevelConfiguration, flowcontrolv1beta3.PriorityLevelEnablement]{ + + { + Value: "Exempt", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.ExemptPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "limited", + func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.LimitedPriorityLevelConfiguration { + return obj.Limited + }, + func(obj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) flowcontrolv1beta3.PriorityLevelEnablement { + return obj.Type + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*flowcontrolv1beta3.LimitedPriorityLevelConfiguration, flowcontrolv1beta3.PriorityLevelEnablement]{ + + { + Value: "Limited", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field flowcontrolv1beta3.PriorityLevelConfigurationSpec.Type + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.PriorityLevelEnablement, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -233,16 +315,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("type"), &obj.Type, safe.Field(oldObj, func(oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.PriorityLevelEnablement { - return &oldObj.Type - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.PriorityLevelEnablement { + return &oldObj.Type + }) + errs = append(errs, fn(fldPath.Child("type"), &obj.Type, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta3.PriorityLevelConfigurationSpec.Limited - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta3.PriorityLevelConfigurationSpec.Limited + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.LimitedPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -255,16 +345,24 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O // call the type's validation function errs = append(errs, Validate_LimitedPriorityLevelConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("limited"), obj.Limited, safe.Field(oldObj, func(oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.LimitedPriorityLevelConfiguration { - return oldObj.Limited - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.LimitedPriorityLevelConfiguration { + return oldObj.Limited + }) + errs = append(errs, fn(fldPath.Child("limited"), obj.Limited, oldVal, oldObj != nil)...) + } - // field flowcontrolv1beta3.PriorityLevelConfigurationSpec.Exempt - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *flowcontrolv1beta3.ExemptPriorityLevelConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field flowcontrolv1beta3.PriorityLevelConfigurationSpec.Exempt + fn := func( + fldPath *field.Path, + obj, oldObj *flowcontrolv1beta3.ExemptPriorityLevelConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -275,9 +373,13 @@ func Validate_PriorityLevelConfigurationSpec(ctx context.Context, op operation.O return // do not proceed } return - }(fldPath.Child("exempt"), obj.Exempt, safe.Field(oldObj, func(oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.ExemptPriorityLevelConfiguration { - return oldObj.Exempt - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *flowcontrolv1beta3.PriorityLevelConfigurationSpec) *flowcontrolv1beta3.ExemptPriorityLevelConfiguration { + return oldObj.Exempt + }) + errs = append(errs, fn(fldPath.Child("exempt"), obj.Exempt, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/networking/v1/zz_generated.validations.go b/pkg/apis/networking/v1/zz_generated.validations.go index b7f88e4f5fe..03641f79623 100644 --- a/pkg/apis/networking/v1/zz_generated.validations.go +++ b/pkg/apis/networking/v1/zz_generated.validations.go @@ -40,62 +40,103 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type IPAddress - scheme.AddValidationFunc((*networkingv1.IPAddress)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_IPAddress(ctx, op, nil /* fldPath */, obj.(*networkingv1.IPAddress), safe.Cast[*networkingv1.IPAddress](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*networkingv1.IPAddress)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_IPAddress( + ctx, op, nil, /* fldPath */ + obj.(*networkingv1.IPAddress), + safe.Cast[*networkingv1.IPAddress](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type IngressClass - scheme.AddValidationFunc((*networkingv1.IngressClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_IngressClass(ctx, op, nil /* fldPath */, obj.(*networkingv1.IngressClass), safe.Cast[*networkingv1.IngressClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*networkingv1.IngressClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_IngressClass( + ctx, op, nil, /* fldPath */ + obj.(*networkingv1.IngressClass), + safe.Cast[*networkingv1.IngressClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type NetworkPolicy - scheme.AddValidationFunc((*networkingv1.NetworkPolicy)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_NetworkPolicy(ctx, op, nil /* fldPath */, obj.(*networkingv1.NetworkPolicy), safe.Cast[*networkingv1.NetworkPolicy](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*networkingv1.NetworkPolicy)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_NetworkPolicy( + ctx, op, nil, /* fldPath */ + obj.(*networkingv1.NetworkPolicy), + safe.Cast[*networkingv1.NetworkPolicy](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_IPAddress validates an instance of IPAddress according // to declarative validation rules in the API schema. -func Validate_IPAddress(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.IPAddress) (errs field.ErrorList) { +func Validate_IPAddress( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.IPAddress) (errs field.ErrorList) { + // field networkingv1.IPAddress.TypeMeta has no validation // field networkingv1.IPAddress.ObjectMeta has no validation - // field networkingv1.IPAddress.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1.IPAddressSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.IPAddress.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1.IPAddressSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IPAddressSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *networkingv1.IPAddress) *networkingv1.IPAddressSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.IPAddress) *networkingv1.IPAddressSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_IPAddressSpec validates an instance of IPAddressSpec according // to declarative validation rules in the API schema. -func Validate_IPAddressSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.IPAddressSpec) (errs field.ErrorList) { - // field networkingv1.IPAddressSpec.ParentRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1.ParentReference, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_IPAddressSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.IPAddressSpec) (errs field.ErrorList) { + + { // field networkingv1.IPAddressSpec.ParentRef + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1.ParentReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -113,20 +154,33 @@ func Validate_IPAddressSpec(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_ParentReference(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("parentRef"), obj.ParentRef, safe.Field(oldObj, func(oldObj *networkingv1.IPAddressSpec) *networkingv1.ParentReference { return oldObj.ParentRef }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.IPAddressSpec) *networkingv1.ParentReference { + return oldObj.ParentRef + }) + errs = append(errs, fn(fldPath.Child("parentRef"), obj.ParentRef, oldVal, oldObj != nil)...) + } return errs } // Validate_IPBlock validates an instance of IPBlock according // to declarative validation rules in the API schema. -func Validate_IPBlock(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.IPBlock) (errs field.ErrorList) { - // field networkingv1.IPBlock.CIDR - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_IPBlock( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.IPBlock) (errs field.ErrorList) { + + { // field networkingv1.IPBlock.CIDR + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -138,7 +192,13 @@ func Validate_IPBlock(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("cidr"), &obj.CIDR, safe.Field(oldObj, func(oldObj *networkingv1.IPBlock) *string { return &oldObj.CIDR }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.IPBlock) *string { + return &oldObj.CIDR + }) + errs = append(errs, fn(fldPath.Child("cidr"), &obj.CIDR, oldVal, oldObj != nil)...) + } // field networkingv1.IPBlock.Except has no validation return errs @@ -146,36 +206,56 @@ func Validate_IPBlock(ctx context.Context, op operation.Operation, fldPath *fiel // Validate_IngressClass validates an instance of IngressClass according // to declarative validation rules in the API schema. -func Validate_IngressClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.IngressClass) (errs field.ErrorList) { +func Validate_IngressClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.IngressClass) (errs field.ErrorList) { + // field networkingv1.IngressClass.TypeMeta has no validation // field networkingv1.IngressClass.ObjectMeta has no validation - // field networkingv1.IngressClass.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1.IngressClassSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.IngressClass.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1.IngressClassSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IngressClassSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *networkingv1.IngressClass) *networkingv1.IngressClassSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.IngressClass) *networkingv1.IngressClassSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_IngressClassParametersReference validates an instance of IngressClassParametersReference according // to declarative validation rules in the API schema. -func Validate_IngressClassParametersReference(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.IngressClassParametersReference) (errs field.ErrorList) { +func Validate_IngressClassParametersReference( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.IngressClassParametersReference) (errs field.ErrorList) { + // field networkingv1.IngressClassParametersReference.APIGroup has no validation - // field networkingv1.IngressClassParametersReference.Kind - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.IngressClassParametersReference.Kind + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -187,14 +267,24 @@ func Validate_IngressClassParametersReference(ctx context.Context, op operation. return // do not proceed } return - }(fldPath.Child("kind"), &obj.Kind, safe.Field(oldObj, func(oldObj *networkingv1.IngressClassParametersReference) *string { return &oldObj.Kind }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.IngressClassParametersReference) *string { + return &oldObj.Kind + }) + errs = append(errs, fn(fldPath.Child("kind"), &obj.Kind, oldVal, oldObj != nil)...) + } - // field networkingv1.IngressClassParametersReference.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.IngressClassParametersReference.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -206,7 +296,13 @@ func Validate_IngressClassParametersReference(ctx context.Context, op operation. return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *networkingv1.IngressClassParametersReference) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.IngressClassParametersReference) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } // field networkingv1.IngressClassParametersReference.Scope has no validation // field networkingv1.IngressClassParametersReference.Namespace has no validation @@ -215,15 +311,22 @@ func Validate_IngressClassParametersReference(ctx context.Context, op operation. // Validate_IngressClassSpec validates an instance of IngressClassSpec according // to declarative validation rules in the API schema. -func Validate_IngressClassSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.IngressClassSpec) (errs field.ErrorList) { +func Validate_IngressClassSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.IngressClassSpec) (errs field.ErrorList) { + // field networkingv1.IngressClassSpec.Controller has no validation - // field networkingv1.IngressClassSpec.Parameters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1.IngressClassParametersReference, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.IngressClassSpec.Parameters + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1.IngressClassParametersReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -236,45 +339,69 @@ func Validate_IngressClassSpec(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_IngressClassParametersReference(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("parameters"), obj.Parameters, safe.Field(oldObj, func(oldObj *networkingv1.IngressClassSpec) *networkingv1.IngressClassParametersReference { - return oldObj.Parameters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.IngressClassSpec) *networkingv1.IngressClassParametersReference { + return oldObj.Parameters + }) + errs = append(errs, fn(fldPath.Child("parameters"), obj.Parameters, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicy validates an instance of NetworkPolicy according // to declarative validation rules in the API schema. -func Validate_NetworkPolicy(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.NetworkPolicy) (errs field.ErrorList) { +func Validate_NetworkPolicy( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.NetworkPolicy) (errs field.ErrorList) { + // field networkingv1.NetworkPolicy.TypeMeta has no validation // field networkingv1.NetworkPolicy.ObjectMeta has no validation - // field networkingv1.NetworkPolicy.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1.NetworkPolicySpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.NetworkPolicy.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1.NetworkPolicySpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_NetworkPolicySpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *networkingv1.NetworkPolicy) *networkingv1.NetworkPolicySpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.NetworkPolicy) *networkingv1.NetworkPolicySpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicyEgressRule validates an instance of NetworkPolicyEgressRule according // to declarative validation rules in the API schema. -func Validate_NetworkPolicyEgressRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.NetworkPolicyEgressRule) (errs field.ErrorList) { +func Validate_NetworkPolicyEgressRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.NetworkPolicyEgressRule) (errs field.ErrorList) { + // field networkingv1.NetworkPolicyEgressRule.Ports has no validation - // field networkingv1.NetworkPolicyEgressRule.To - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []networkingv1.NetworkPolicyPeer, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.NetworkPolicyEgressRule.To + fn := func( + fldPath *field.Path, + obj, oldObj []networkingv1.NetworkPolicyPeer, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -285,24 +412,39 @@ func Validate_NetworkPolicyEgressRule(ctx context.Context, op operation.Operatio return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("to"), obj.To, safe.Field(oldObj, func(oldObj *networkingv1.NetworkPolicyEgressRule) []networkingv1.NetworkPolicyPeer { return oldObj.To }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.NetworkPolicyEgressRule) []networkingv1.NetworkPolicyPeer { + return oldObj.To + }) + errs = append(errs, fn(fldPath.Child("to"), obj.To, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicyIngressRule validates an instance of NetworkPolicyIngressRule according // to declarative validation rules in the API schema. -func Validate_NetworkPolicyIngressRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.NetworkPolicyIngressRule) (errs field.ErrorList) { +func Validate_NetworkPolicyIngressRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.NetworkPolicyIngressRule) (errs field.ErrorList) { + // field networkingv1.NetworkPolicyIngressRule.Ports has no validation - // field networkingv1.NetworkPolicyIngressRule.From - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []networkingv1.NetworkPolicyPeer, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.NetworkPolicyIngressRule.From + fn := func( + fldPath *field.Path, + obj, oldObj []networkingv1.NetworkPolicyPeer, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -313,27 +455,40 @@ func Validate_NetworkPolicyIngressRule(ctx context.Context, op operation.Operati return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("from"), obj.From, safe.Field(oldObj, func(oldObj *networkingv1.NetworkPolicyIngressRule) []networkingv1.NetworkPolicyPeer { - return oldObj.From - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.NetworkPolicyIngressRule) []networkingv1.NetworkPolicyPeer { + return oldObj.From + }) + errs = append(errs, fn(fldPath.Child("from"), obj.From, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicyPeer validates an instance of NetworkPolicyPeer according // to declarative validation rules in the API schema. -func Validate_NetworkPolicyPeer(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.NetworkPolicyPeer) (errs field.ErrorList) { +func Validate_NetworkPolicyPeer( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.NetworkPolicyPeer) (errs field.ErrorList) { + // field networkingv1.NetworkPolicyPeer.PodSelector has no validation // field networkingv1.NetworkPolicyPeer.NamespaceSelector has no validation - // field networkingv1.NetworkPolicyPeer.IPBlock - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1.IPBlock, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.NetworkPolicyPeer.IPBlock + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1.IPBlock, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -346,22 +501,35 @@ func Validate_NetworkPolicyPeer(ctx context.Context, op operation.Operation, fld // call the type's validation function errs = append(errs, Validate_IPBlock(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("ipBlock"), obj.IPBlock, safe.Field(oldObj, func(oldObj *networkingv1.NetworkPolicyPeer) *networkingv1.IPBlock { return oldObj.IPBlock }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.NetworkPolicyPeer) *networkingv1.IPBlock { + return oldObj.IPBlock + }) + errs = append(errs, fn(fldPath.Child("ipBlock"), obj.IPBlock, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicySpec validates an instance of NetworkPolicySpec according // to declarative validation rules in the API schema. -func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.NetworkPolicySpec) (errs field.ErrorList) { +func Validate_NetworkPolicySpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.NetworkPolicySpec) (errs field.ErrorList) { + // field networkingv1.NetworkPolicySpec.PodSelector has no validation - // field networkingv1.NetworkPolicySpec.Ingress - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []networkingv1.NetworkPolicyIngressRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.NetworkPolicySpec.Ingress + fn := func( + fldPath *field.Path, + obj, oldObj []networkingv1.NetworkPolicyIngressRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -372,18 +540,28 @@ func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyIngressRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyIngressRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ingress"), obj.Ingress, safe.Field(oldObj, func(oldObj *networkingv1.NetworkPolicySpec) []networkingv1.NetworkPolicyIngressRule { - return oldObj.Ingress - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.NetworkPolicySpec) []networkingv1.NetworkPolicyIngressRule { + return oldObj.Ingress + }) + errs = append(errs, fn(fldPath.Child("ingress"), obj.Ingress, oldVal, oldObj != nil)...) + } - // field networkingv1.NetworkPolicySpec.Egress - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []networkingv1.NetworkPolicyEgressRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.NetworkPolicySpec.Egress + fn := func( + fldPath *field.Path, + obj, oldObj []networkingv1.NetworkPolicyEgressRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -394,11 +572,17 @@ func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyEgressRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyEgressRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("egress"), obj.Egress, safe.Field(oldObj, func(oldObj *networkingv1.NetworkPolicySpec) []networkingv1.NetworkPolicyEgressRule { - return oldObj.Egress - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.NetworkPolicySpec) []networkingv1.NetworkPolicyEgressRule { + return oldObj.Egress + }) + errs = append(errs, fn(fldPath.Child("egress"), obj.Egress, oldVal, oldObj != nil)...) + } // field networkingv1.NetworkPolicySpec.PolicyTypes has no validation return errs @@ -406,15 +590,22 @@ func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fld // Validate_ParentReference validates an instance of ParentReference according // to declarative validation rules in the API schema. -func Validate_ParentReference(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1.ParentReference) (errs field.ErrorList) { +func Validate_ParentReference( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1.ParentReference) (errs field.ErrorList) { + // field networkingv1.ParentReference.Group has no validation - // field networkingv1.ParentReference.Resource - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.ParentReference.Resource + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -426,16 +617,26 @@ func Validate_ParentReference(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("resource"), &obj.Resource, safe.Field(oldObj, func(oldObj *networkingv1.ParentReference) *string { return &oldObj.Resource }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.ParentReference) *string { + return &oldObj.Resource + }) + errs = append(errs, fn(fldPath.Child("resource"), &obj.Resource, oldVal, oldObj != nil)...) + } // field networkingv1.ParentReference.Namespace has no validation - // field networkingv1.ParentReference.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1.ParentReference.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -447,7 +648,13 @@ func Validate_ParentReference(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *networkingv1.ParentReference) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1.ParentReference) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/networking/v1beta1/zz_generated.validations.go b/pkg/apis/networking/v1beta1/zz_generated.validations.go index 7703f8bf6f8..e8691e666cd 100644 --- a/pkg/apis/networking/v1beta1/zz_generated.validations.go +++ b/pkg/apis/networking/v1beta1/zz_generated.validations.go @@ -40,54 +40,88 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type IPAddress - scheme.AddValidationFunc((*networkingv1beta1.IPAddress)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_IPAddress(ctx, op, nil /* fldPath */, obj.(*networkingv1beta1.IPAddress), safe.Cast[*networkingv1beta1.IPAddress](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*networkingv1beta1.IPAddress)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_IPAddress( + ctx, op, nil, /* fldPath */ + obj.(*networkingv1beta1.IPAddress), + safe.Cast[*networkingv1beta1.IPAddress](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type IngressClass - scheme.AddValidationFunc((*networkingv1beta1.IngressClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_IngressClass(ctx, op, nil /* fldPath */, obj.(*networkingv1beta1.IngressClass), safe.Cast[*networkingv1beta1.IngressClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*networkingv1beta1.IngressClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_IngressClass( + ctx, op, nil, /* fldPath */ + obj.(*networkingv1beta1.IngressClass), + safe.Cast[*networkingv1beta1.IngressClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_IPAddress validates an instance of IPAddress according // to declarative validation rules in the API schema. -func Validate_IPAddress(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1beta1.IPAddress) (errs field.ErrorList) { +func Validate_IPAddress( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1beta1.IPAddress) (errs field.ErrorList) { + // field networkingv1beta1.IPAddress.TypeMeta has no validation // field networkingv1beta1.IPAddress.ObjectMeta has no validation - // field networkingv1beta1.IPAddress.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1beta1.IPAddressSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1beta1.IPAddress.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1beta1.IPAddressSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IPAddressSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *networkingv1beta1.IPAddress) *networkingv1beta1.IPAddressSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.IPAddress) *networkingv1beta1.IPAddressSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_IPAddressSpec validates an instance of IPAddressSpec according // to declarative validation rules in the API schema. -func Validate_IPAddressSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1beta1.IPAddressSpec) (errs field.ErrorList) { - // field networkingv1beta1.IPAddressSpec.ParentRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1beta1.ParentReference, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_IPAddressSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1beta1.IPAddressSpec) (errs field.ErrorList) { + + { // field networkingv1beta1.IPAddressSpec.ParentRef + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1beta1.ParentReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -105,45 +139,69 @@ func Validate_IPAddressSpec(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_ParentReference(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("parentRef"), obj.ParentRef, safe.Field(oldObj, func(oldObj *networkingv1beta1.IPAddressSpec) *networkingv1beta1.ParentReference { - return oldObj.ParentRef - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.IPAddressSpec) *networkingv1beta1.ParentReference { + return oldObj.ParentRef + }) + errs = append(errs, fn(fldPath.Child("parentRef"), obj.ParentRef, oldVal, oldObj != nil)...) + } return errs } // Validate_IngressClass validates an instance of IngressClass according // to declarative validation rules in the API schema. -func Validate_IngressClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1beta1.IngressClass) (errs field.ErrorList) { +func Validate_IngressClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1beta1.IngressClass) (errs field.ErrorList) { + // field networkingv1beta1.IngressClass.TypeMeta has no validation // field networkingv1beta1.IngressClass.ObjectMeta has no validation - // field networkingv1beta1.IngressClass.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1beta1.IngressClassSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1beta1.IngressClass.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1beta1.IngressClassSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IngressClassSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *networkingv1beta1.IngressClass) *networkingv1beta1.IngressClassSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.IngressClass) *networkingv1beta1.IngressClassSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_IngressClassParametersReference validates an instance of IngressClassParametersReference according // to declarative validation rules in the API schema. -func Validate_IngressClassParametersReference(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1beta1.IngressClassParametersReference) (errs field.ErrorList) { +func Validate_IngressClassParametersReference( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1beta1.IngressClassParametersReference) (errs field.ErrorList) { + // field networkingv1beta1.IngressClassParametersReference.APIGroup has no validation - // field networkingv1beta1.IngressClassParametersReference.Kind - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1beta1.IngressClassParametersReference.Kind + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -155,14 +213,24 @@ func Validate_IngressClassParametersReference(ctx context.Context, op operation. return // do not proceed } return - }(fldPath.Child("kind"), &obj.Kind, safe.Field(oldObj, func(oldObj *networkingv1beta1.IngressClassParametersReference) *string { return &oldObj.Kind }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.IngressClassParametersReference) *string { + return &oldObj.Kind + }) + errs = append(errs, fn(fldPath.Child("kind"), &obj.Kind, oldVal, oldObj != nil)...) + } - // field networkingv1beta1.IngressClassParametersReference.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1beta1.IngressClassParametersReference.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -174,7 +242,13 @@ func Validate_IngressClassParametersReference(ctx context.Context, op operation. return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *networkingv1beta1.IngressClassParametersReference) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.IngressClassParametersReference) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } // field networkingv1beta1.IngressClassParametersReference.Scope has no validation // field networkingv1beta1.IngressClassParametersReference.Namespace has no validation @@ -183,15 +257,22 @@ func Validate_IngressClassParametersReference(ctx context.Context, op operation. // Validate_IngressClassSpec validates an instance of IngressClassSpec according // to declarative validation rules in the API schema. -func Validate_IngressClassSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1beta1.IngressClassSpec) (errs field.ErrorList) { +func Validate_IngressClassSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1beta1.IngressClassSpec) (errs field.ErrorList) { + // field networkingv1beta1.IngressClassSpec.Controller has no validation - // field networkingv1beta1.IngressClassSpec.Parameters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *networkingv1beta1.IngressClassParametersReference, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1beta1.IngressClassSpec.Parameters + fn := func( + fldPath *field.Path, + obj, oldObj *networkingv1beta1.IngressClassParametersReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -204,24 +285,35 @@ func Validate_IngressClassSpec(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_IngressClassParametersReference(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("parameters"), obj.Parameters, safe.Field(oldObj, func(oldObj *networkingv1beta1.IngressClassSpec) *networkingv1beta1.IngressClassParametersReference { - return oldObj.Parameters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.IngressClassSpec) *networkingv1beta1.IngressClassParametersReference { + return oldObj.Parameters + }) + errs = append(errs, fn(fldPath.Child("parameters"), obj.Parameters, oldVal, oldObj != nil)...) + } return errs } // Validate_ParentReference validates an instance of ParentReference according // to declarative validation rules in the API schema. -func Validate_ParentReference(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *networkingv1beta1.ParentReference) (errs field.ErrorList) { +func Validate_ParentReference( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *networkingv1beta1.ParentReference) (errs field.ErrorList) { + // field networkingv1beta1.ParentReference.Group has no validation - // field networkingv1beta1.ParentReference.Resource - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1beta1.ParentReference.Resource + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -233,16 +325,26 @@ func Validate_ParentReference(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("resource"), &obj.Resource, safe.Field(oldObj, func(oldObj *networkingv1beta1.ParentReference) *string { return &oldObj.Resource }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.ParentReference) *string { + return &oldObj.Resource + }) + errs = append(errs, fn(fldPath.Child("resource"), &obj.Resource, oldVal, oldObj != nil)...) + } // field networkingv1beta1.ParentReference.Namespace has no validation - // field networkingv1beta1.ParentReference.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field networkingv1beta1.ParentReference.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -254,7 +356,13 @@ func Validate_ParentReference(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *networkingv1beta1.ParentReference) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *networkingv1beta1.ParentReference) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/node/v1/zz_generated.validations.go b/pkg/apis/node/v1/zz_generated.validations.go index 491517115b7..b6410db7b27 100644 --- a/pkg/apis/node/v1/zz_generated.validations.go +++ b/pkg/apis/node/v1/zz_generated.validations.go @@ -39,28 +39,42 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type RuntimeClass - scheme.AddValidationFunc((*nodev1.RuntimeClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_RuntimeClass(ctx, op, nil /* fldPath */, obj.(*nodev1.RuntimeClass), safe.Cast[*nodev1.RuntimeClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*nodev1.RuntimeClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_RuntimeClass( + ctx, op, nil, /* fldPath */ + obj.(*nodev1.RuntimeClass), + safe.Cast[*nodev1.RuntimeClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_RuntimeClass validates an instance of RuntimeClass according // to declarative validation rules in the API schema. -func Validate_RuntimeClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *nodev1.RuntimeClass) (errs field.ErrorList) { +func Validate_RuntimeClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *nodev1.RuntimeClass) (errs field.ErrorList) { + // field nodev1.RuntimeClass.TypeMeta has no validation // field nodev1.RuntimeClass.ObjectMeta has no validation - // field nodev1.RuntimeClass.Handler - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field nodev1.RuntimeClass.Handler + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -75,9 +89,17 @@ func Validate_RuntimeClass(ctx context.Context, op operation.Operation, fldPath if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("handler"), &obj.Handler, safe.Field(oldObj, func(oldObj *nodev1.RuntimeClass) *string { return &oldObj.Handler }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *nodev1.RuntimeClass) *string { + return &oldObj.Handler + }) + errs = append(errs, fn(fldPath.Child("handler"), &obj.Handler, oldVal, oldObj != nil)...) + } // field nodev1.RuntimeClass.Overhead has no validation // field nodev1.RuntimeClass.Scheduling has no validation diff --git a/pkg/apis/node/v1alpha1/zz_generated.validations.go b/pkg/apis/node/v1alpha1/zz_generated.validations.go index 579234c688c..66401574f11 100644 --- a/pkg/apis/node/v1alpha1/zz_generated.validations.go +++ b/pkg/apis/node/v1alpha1/zz_generated.validations.go @@ -40,46 +40,73 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type RuntimeClass - scheme.AddValidationFunc((*nodev1alpha1.RuntimeClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_RuntimeClass(ctx, op, nil /* fldPath */, obj.(*nodev1alpha1.RuntimeClass), safe.Cast[*nodev1alpha1.RuntimeClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*nodev1alpha1.RuntimeClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_RuntimeClass( + ctx, op, nil, /* fldPath */ + obj.(*nodev1alpha1.RuntimeClass), + safe.Cast[*nodev1alpha1.RuntimeClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_RuntimeClass validates an instance of RuntimeClass according // to declarative validation rules in the API schema. -func Validate_RuntimeClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *nodev1alpha1.RuntimeClass) (errs field.ErrorList) { +func Validate_RuntimeClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *nodev1alpha1.RuntimeClass) (errs field.ErrorList) { + // field nodev1alpha1.RuntimeClass.TypeMeta has no validation // field nodev1alpha1.RuntimeClass.ObjectMeta has no validation - // field nodev1alpha1.RuntimeClass.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *nodev1alpha1.RuntimeClassSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field nodev1alpha1.RuntimeClass.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *nodev1alpha1.RuntimeClassSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_RuntimeClassSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *nodev1alpha1.RuntimeClass) *nodev1alpha1.RuntimeClassSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *nodev1alpha1.RuntimeClass) *nodev1alpha1.RuntimeClassSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_RuntimeClassSpec validates an instance of RuntimeClassSpec according // to declarative validation rules in the API schema. -func Validate_RuntimeClassSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *nodev1alpha1.RuntimeClassSpec) (errs field.ErrorList) { - // field nodev1alpha1.RuntimeClassSpec.RuntimeHandler - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_RuntimeClassSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *nodev1alpha1.RuntimeClassSpec) (errs field.ErrorList) { + + { // field nodev1alpha1.RuntimeClassSpec.RuntimeHandler + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -94,9 +121,17 @@ func Validate_RuntimeClassSpec(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("runtimeHandler"), &obj.RuntimeHandler, safe.Field(oldObj, func(oldObj *nodev1alpha1.RuntimeClassSpec) *string { return &oldObj.RuntimeHandler }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *nodev1alpha1.RuntimeClassSpec) *string { + return &oldObj.RuntimeHandler + }) + errs = append(errs, fn(fldPath.Child("runtimeHandler"), &obj.RuntimeHandler, oldVal, oldObj != nil)...) + } // field nodev1alpha1.RuntimeClassSpec.Overhead has no validation // field nodev1alpha1.RuntimeClassSpec.Scheduling has no validation diff --git a/pkg/apis/node/v1beta1/zz_generated.validations.go b/pkg/apis/node/v1beta1/zz_generated.validations.go index 45bc38fc868..e1b617ab947 100644 --- a/pkg/apis/node/v1beta1/zz_generated.validations.go +++ b/pkg/apis/node/v1beta1/zz_generated.validations.go @@ -39,28 +39,42 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type RuntimeClass - scheme.AddValidationFunc((*nodev1beta1.RuntimeClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_RuntimeClass(ctx, op, nil /* fldPath */, obj.(*nodev1beta1.RuntimeClass), safe.Cast[*nodev1beta1.RuntimeClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*nodev1beta1.RuntimeClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_RuntimeClass( + ctx, op, nil, /* fldPath */ + obj.(*nodev1beta1.RuntimeClass), + safe.Cast[*nodev1beta1.RuntimeClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_RuntimeClass validates an instance of RuntimeClass according // to declarative validation rules in the API schema. -func Validate_RuntimeClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *nodev1beta1.RuntimeClass) (errs field.ErrorList) { +func Validate_RuntimeClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *nodev1beta1.RuntimeClass) (errs field.ErrorList) { + // field nodev1beta1.RuntimeClass.TypeMeta has no validation // field nodev1beta1.RuntimeClass.ObjectMeta has no validation - // field nodev1beta1.RuntimeClass.Handler - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field nodev1beta1.RuntimeClass.Handler + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -75,9 +89,17 @@ func Validate_RuntimeClass(ctx context.Context, op operation.Operation, fldPath if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("handler"), &obj.Handler, safe.Field(oldObj, func(oldObj *nodev1beta1.RuntimeClass) *string { return &oldObj.Handler }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *nodev1beta1.RuntimeClass) *string { + return &oldObj.Handler + }) + errs = append(errs, fn(fldPath.Child("handler"), &obj.Handler, oldVal, oldObj != nil)...) + } // field nodev1beta1.RuntimeClass.Overhead has no validation // field nodev1beta1.RuntimeClass.Scheduling has no validation diff --git a/pkg/apis/rbac/v1/zz_generated.validations.go b/pkg/apis/rbac/v1/zz_generated.validations.go index 9cb1971123d..edd787bb3bc 100644 --- a/pkg/apis/rbac/v1/zz_generated.validations.go +++ b/pkg/apis/rbac/v1/zz_generated.validations.go @@ -40,52 +40,87 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type ClusterRole - scheme.AddValidationFunc((*rbacv1.ClusterRole)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ClusterRole(ctx, op, nil /* fldPath */, obj.(*rbacv1.ClusterRole), safe.Cast[*rbacv1.ClusterRole](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1.ClusterRole)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ClusterRole( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1.ClusterRole), + safe.Cast[*rbacv1.ClusterRole](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ClusterRoleBinding - scheme.AddValidationFunc((*rbacv1.ClusterRoleBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ClusterRoleBinding(ctx, op, nil /* fldPath */, obj.(*rbacv1.ClusterRoleBinding), safe.Cast[*rbacv1.ClusterRoleBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1.ClusterRoleBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ClusterRoleBinding( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1.ClusterRoleBinding), + safe.Cast[*rbacv1.ClusterRoleBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Role - scheme.AddValidationFunc((*rbacv1.Role)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Role(ctx, op, nil /* fldPath */, obj.(*rbacv1.Role), safe.Cast[*rbacv1.Role](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1.Role)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Role( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1.Role), + safe.Cast[*rbacv1.Role](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type RoleBinding - scheme.AddValidationFunc((*rbacv1.RoleBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_RoleBinding(ctx, op, nil /* fldPath */, obj.(*rbacv1.RoleBinding), safe.Cast[*rbacv1.RoleBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1.RoleBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_RoleBinding( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1.RoleBinding), + safe.Cast[*rbacv1.RoleBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ClusterRole validates an instance of ClusterRole according // to declarative validation rules in the API schema. -func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1.ClusterRole) (errs field.ErrorList) { +func Validate_ClusterRole( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1.ClusterRole) (errs field.ErrorList) { + // field rbacv1.ClusterRole.TypeMeta has no validation // field rbacv1.ClusterRole.ObjectMeta has no validation - // field rbacv1.ClusterRole.Rules - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1.PolicyRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.ClusterRole.Rules + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1.PolicyRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -96,9 +131,17 @@ func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("rules"), obj.Rules, safe.Field(oldObj, func(oldObj *rbacv1.ClusterRole) []rbacv1.PolicyRule { return oldObj.Rules }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.ClusterRole) []rbacv1.PolicyRule { + return oldObj.Rules + }) + errs = append(errs, fn(fldPath.Child("rules"), obj.Rules, oldVal, oldObj != nil)...) + } // field rbacv1.ClusterRole.AggregationRule has no validation return errs @@ -106,16 +149,23 @@ func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath * // Validate_ClusterRoleBinding validates an instance of ClusterRoleBinding according // to declarative validation rules in the API schema. -func Validate_ClusterRoleBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1.ClusterRoleBinding) (errs field.ErrorList) { +func Validate_ClusterRoleBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1.ClusterRoleBinding) (errs field.ErrorList) { + // field rbacv1.ClusterRoleBinding.TypeMeta has no validation // field rbacv1.ClusterRoleBinding.ObjectMeta has no validation - // field rbacv1.ClusterRoleBinding.Subjects - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1.Subject, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.ClusterRoleBinding.Subjects + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1.Subject, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -126,34 +176,59 @@ func Validate_ClusterRoleBinding(ctx context.Context, op operation.Operation, fl return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("subjects"), obj.Subjects, safe.Field(oldObj, func(oldObj *rbacv1.ClusterRoleBinding) []rbacv1.Subject { return oldObj.Subjects }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.ClusterRoleBinding) []rbacv1.Subject { + return oldObj.Subjects + }) + errs = append(errs, fn(fldPath.Child("subjects"), obj.Subjects, oldVal, oldObj != nil)...) + } - // field rbacv1.ClusterRoleBinding.RoleRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *rbacv1.RoleRef, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.ClusterRoleBinding.RoleRef + fn := func( + fldPath *field.Path, + obj, oldObj *rbacv1.RoleRef, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_RoleRef(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("roleRef"), &obj.RoleRef, safe.Field(oldObj, func(oldObj *rbacv1.ClusterRoleBinding) *rbacv1.RoleRef { return &oldObj.RoleRef }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.ClusterRoleBinding) *rbacv1.RoleRef { + return &oldObj.RoleRef + }) + errs = append(errs, fn(fldPath.Child("roleRef"), &obj.RoleRef, oldVal, oldObj != nil)...) + } return errs } // Validate_PolicyRule validates an instance of PolicyRule according // to declarative validation rules in the API schema. -func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1.PolicyRule) (errs field.ErrorList) { - // field rbacv1.PolicyRule.Verbs - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_PolicyRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1.PolicyRule) (errs field.ErrorList) { + + { // field rbacv1.PolicyRule.Verbs + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -165,7 +240,13 @@ func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *f return // do not proceed } return - }(fldPath.Child("verbs"), obj.Verbs, safe.Field(oldObj, func(oldObj *rbacv1.PolicyRule) []string { return oldObj.Verbs }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.PolicyRule) []string { + return oldObj.Verbs + }) + errs = append(errs, fn(fldPath.Child("verbs"), obj.Verbs, oldVal, oldObj != nil)...) + } // field rbacv1.PolicyRule.APIGroups has no validation // field rbacv1.PolicyRule.Resources has no validation @@ -176,16 +257,23 @@ func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *f // Validate_Role validates an instance of Role according // to declarative validation rules in the API schema. -func Validate_Role(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1.Role) (errs field.ErrorList) { +func Validate_Role( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1.Role) (errs field.ErrorList) { + // field rbacv1.Role.TypeMeta has no validation // field rbacv1.Role.ObjectMeta has no validation - // field rbacv1.Role.Rules - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1.PolicyRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.Role.Rules + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1.PolicyRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -196,25 +284,40 @@ func Validate_Role(ctx context.Context, op operation.Operation, fldPath *field.P return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("rules"), obj.Rules, safe.Field(oldObj, func(oldObj *rbacv1.Role) []rbacv1.PolicyRule { return oldObj.Rules }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.Role) []rbacv1.PolicyRule { + return oldObj.Rules + }) + errs = append(errs, fn(fldPath.Child("rules"), obj.Rules, oldVal, oldObj != nil)...) + } return errs } // Validate_RoleBinding validates an instance of RoleBinding according // to declarative validation rules in the API schema. -func Validate_RoleBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1.RoleBinding) (errs field.ErrorList) { +func Validate_RoleBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1.RoleBinding) (errs field.ErrorList) { + // field rbacv1.RoleBinding.TypeMeta has no validation // field rbacv1.RoleBinding.ObjectMeta has no validation - // field rbacv1.RoleBinding.Subjects - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1.Subject, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.RoleBinding.Subjects + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1.Subject, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -225,37 +328,62 @@ func Validate_RoleBinding(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("subjects"), obj.Subjects, safe.Field(oldObj, func(oldObj *rbacv1.RoleBinding) []rbacv1.Subject { return oldObj.Subjects }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.RoleBinding) []rbacv1.Subject { + return oldObj.Subjects + }) + errs = append(errs, fn(fldPath.Child("subjects"), obj.Subjects, oldVal, oldObj != nil)...) + } - // field rbacv1.RoleBinding.RoleRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *rbacv1.RoleRef, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.RoleBinding.RoleRef + fn := func( + fldPath *field.Path, + obj, oldObj *rbacv1.RoleRef, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_RoleRef(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("roleRef"), &obj.RoleRef, safe.Field(oldObj, func(oldObj *rbacv1.RoleBinding) *rbacv1.RoleRef { return &oldObj.RoleRef }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.RoleBinding) *rbacv1.RoleRef { + return &oldObj.RoleRef + }) + errs = append(errs, fn(fldPath.Child("roleRef"), &obj.RoleRef, oldVal, oldObj != nil)...) + } return errs } // Validate_RoleRef validates an instance of RoleRef according // to declarative validation rules in the API schema. -func Validate_RoleRef(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1.RoleRef) (errs field.ErrorList) { +func Validate_RoleRef( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1.RoleRef) (errs field.ErrorList) { + // field rbacv1.RoleRef.APIGroup has no validation // field rbacv1.RoleRef.Kind has no validation - // field rbacv1.RoleRef.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.RoleRef.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -267,23 +395,36 @@ func Validate_RoleRef(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *rbacv1.RoleRef) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.RoleRef) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } return errs } // Validate_Subject validates an instance of Subject according // to declarative validation rules in the API schema. -func Validate_Subject(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1.Subject) (errs field.ErrorList) { +func Validate_Subject( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1.Subject) (errs field.ErrorList) { + // field rbacv1.Subject.Kind has no validation // field rbacv1.Subject.APIGroup has no validation - // field rbacv1.Subject.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1.Subject.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -295,7 +436,13 @@ func Validate_Subject(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *rbacv1.Subject) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1.Subject) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } // field rbacv1.Subject.Namespace has no validation return errs diff --git a/pkg/apis/rbac/v1alpha1/zz_generated.validations.go b/pkg/apis/rbac/v1alpha1/zz_generated.validations.go index d9d49b980bb..666faab4f15 100644 --- a/pkg/apis/rbac/v1alpha1/zz_generated.validations.go +++ b/pkg/apis/rbac/v1alpha1/zz_generated.validations.go @@ -40,52 +40,87 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type ClusterRole - scheme.AddValidationFunc((*rbacv1alpha1.ClusterRole)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ClusterRole(ctx, op, nil /* fldPath */, obj.(*rbacv1alpha1.ClusterRole), safe.Cast[*rbacv1alpha1.ClusterRole](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1alpha1.ClusterRole)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ClusterRole( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1alpha1.ClusterRole), + safe.Cast[*rbacv1alpha1.ClusterRole](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ClusterRoleBinding - scheme.AddValidationFunc((*rbacv1alpha1.ClusterRoleBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ClusterRoleBinding(ctx, op, nil /* fldPath */, obj.(*rbacv1alpha1.ClusterRoleBinding), safe.Cast[*rbacv1alpha1.ClusterRoleBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1alpha1.ClusterRoleBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ClusterRoleBinding( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1alpha1.ClusterRoleBinding), + safe.Cast[*rbacv1alpha1.ClusterRoleBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Role - scheme.AddValidationFunc((*rbacv1alpha1.Role)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Role(ctx, op, nil /* fldPath */, obj.(*rbacv1alpha1.Role), safe.Cast[*rbacv1alpha1.Role](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1alpha1.Role)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Role( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1alpha1.Role), + safe.Cast[*rbacv1alpha1.Role](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type RoleBinding - scheme.AddValidationFunc((*rbacv1alpha1.RoleBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_RoleBinding(ctx, op, nil /* fldPath */, obj.(*rbacv1alpha1.RoleBinding), safe.Cast[*rbacv1alpha1.RoleBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1alpha1.RoleBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_RoleBinding( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1alpha1.RoleBinding), + safe.Cast[*rbacv1alpha1.RoleBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ClusterRole validates an instance of ClusterRole according // to declarative validation rules in the API schema. -func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1alpha1.ClusterRole) (errs field.ErrorList) { +func Validate_ClusterRole( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1alpha1.ClusterRole) (errs field.ErrorList) { + // field rbacv1alpha1.ClusterRole.TypeMeta has no validation // field rbacv1alpha1.ClusterRole.ObjectMeta has no validation - // field rbacv1alpha1.ClusterRole.Rules - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1alpha1.PolicyRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.ClusterRole.Rules + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1alpha1.PolicyRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -96,9 +131,17 @@ func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("rules"), obj.Rules, safe.Field(oldObj, func(oldObj *rbacv1alpha1.ClusterRole) []rbacv1alpha1.PolicyRule { return oldObj.Rules }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.ClusterRole) []rbacv1alpha1.PolicyRule { + return oldObj.Rules + }) + errs = append(errs, fn(fldPath.Child("rules"), obj.Rules, oldVal, oldObj != nil)...) + } // field rbacv1alpha1.ClusterRole.AggregationRule has no validation return errs @@ -106,16 +149,23 @@ func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath * // Validate_ClusterRoleBinding validates an instance of ClusterRoleBinding according // to declarative validation rules in the API schema. -func Validate_ClusterRoleBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1alpha1.ClusterRoleBinding) (errs field.ErrorList) { +func Validate_ClusterRoleBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1alpha1.ClusterRoleBinding) (errs field.ErrorList) { + // field rbacv1alpha1.ClusterRoleBinding.TypeMeta has no validation // field rbacv1alpha1.ClusterRoleBinding.ObjectMeta has no validation - // field rbacv1alpha1.ClusterRoleBinding.Subjects - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1alpha1.Subject, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.ClusterRoleBinding.Subjects + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1alpha1.Subject, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -126,34 +176,59 @@ func Validate_ClusterRoleBinding(ctx context.Context, op operation.Operation, fl return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("subjects"), obj.Subjects, safe.Field(oldObj, func(oldObj *rbacv1alpha1.ClusterRoleBinding) []rbacv1alpha1.Subject { return oldObj.Subjects }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.ClusterRoleBinding) []rbacv1alpha1.Subject { + return oldObj.Subjects + }) + errs = append(errs, fn(fldPath.Child("subjects"), obj.Subjects, oldVal, oldObj != nil)...) + } - // field rbacv1alpha1.ClusterRoleBinding.RoleRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *rbacv1alpha1.RoleRef, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.ClusterRoleBinding.RoleRef + fn := func( + fldPath *field.Path, + obj, oldObj *rbacv1alpha1.RoleRef, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_RoleRef(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("roleRef"), &obj.RoleRef, safe.Field(oldObj, func(oldObj *rbacv1alpha1.ClusterRoleBinding) *rbacv1alpha1.RoleRef { return &oldObj.RoleRef }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.ClusterRoleBinding) *rbacv1alpha1.RoleRef { + return &oldObj.RoleRef + }) + errs = append(errs, fn(fldPath.Child("roleRef"), &obj.RoleRef, oldVal, oldObj != nil)...) + } return errs } // Validate_PolicyRule validates an instance of PolicyRule according // to declarative validation rules in the API schema. -func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1alpha1.PolicyRule) (errs field.ErrorList) { - // field rbacv1alpha1.PolicyRule.Verbs - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_PolicyRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1alpha1.PolicyRule) (errs field.ErrorList) { + + { // field rbacv1alpha1.PolicyRule.Verbs + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -165,7 +240,13 @@ func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *f return // do not proceed } return - }(fldPath.Child("verbs"), obj.Verbs, safe.Field(oldObj, func(oldObj *rbacv1alpha1.PolicyRule) []string { return oldObj.Verbs }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.PolicyRule) []string { + return oldObj.Verbs + }) + errs = append(errs, fn(fldPath.Child("verbs"), obj.Verbs, oldVal, oldObj != nil)...) + } // field rbacv1alpha1.PolicyRule.APIGroups has no validation // field rbacv1alpha1.PolicyRule.Resources has no validation @@ -176,16 +257,23 @@ func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *f // Validate_Role validates an instance of Role according // to declarative validation rules in the API schema. -func Validate_Role(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1alpha1.Role) (errs field.ErrorList) { +func Validate_Role( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1alpha1.Role) (errs field.ErrorList) { + // field rbacv1alpha1.Role.TypeMeta has no validation // field rbacv1alpha1.Role.ObjectMeta has no validation - // field rbacv1alpha1.Role.Rules - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1alpha1.PolicyRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.Role.Rules + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1alpha1.PolicyRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -196,25 +284,40 @@ func Validate_Role(ctx context.Context, op operation.Operation, fldPath *field.P return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("rules"), obj.Rules, safe.Field(oldObj, func(oldObj *rbacv1alpha1.Role) []rbacv1alpha1.PolicyRule { return oldObj.Rules }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.Role) []rbacv1alpha1.PolicyRule { + return oldObj.Rules + }) + errs = append(errs, fn(fldPath.Child("rules"), obj.Rules, oldVal, oldObj != nil)...) + } return errs } // Validate_RoleBinding validates an instance of RoleBinding according // to declarative validation rules in the API schema. -func Validate_RoleBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1alpha1.RoleBinding) (errs field.ErrorList) { +func Validate_RoleBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1alpha1.RoleBinding) (errs field.ErrorList) { + // field rbacv1alpha1.RoleBinding.TypeMeta has no validation // field rbacv1alpha1.RoleBinding.ObjectMeta has no validation - // field rbacv1alpha1.RoleBinding.Subjects - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1alpha1.Subject, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.RoleBinding.Subjects + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1alpha1.Subject, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -225,37 +328,62 @@ func Validate_RoleBinding(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("subjects"), obj.Subjects, safe.Field(oldObj, func(oldObj *rbacv1alpha1.RoleBinding) []rbacv1alpha1.Subject { return oldObj.Subjects }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.RoleBinding) []rbacv1alpha1.Subject { + return oldObj.Subjects + }) + errs = append(errs, fn(fldPath.Child("subjects"), obj.Subjects, oldVal, oldObj != nil)...) + } - // field rbacv1alpha1.RoleBinding.RoleRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *rbacv1alpha1.RoleRef, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.RoleBinding.RoleRef + fn := func( + fldPath *field.Path, + obj, oldObj *rbacv1alpha1.RoleRef, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_RoleRef(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("roleRef"), &obj.RoleRef, safe.Field(oldObj, func(oldObj *rbacv1alpha1.RoleBinding) *rbacv1alpha1.RoleRef { return &oldObj.RoleRef }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.RoleBinding) *rbacv1alpha1.RoleRef { + return &oldObj.RoleRef + }) + errs = append(errs, fn(fldPath.Child("roleRef"), &obj.RoleRef, oldVal, oldObj != nil)...) + } return errs } // Validate_RoleRef validates an instance of RoleRef according // to declarative validation rules in the API schema. -func Validate_RoleRef(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1alpha1.RoleRef) (errs field.ErrorList) { +func Validate_RoleRef( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1alpha1.RoleRef) (errs field.ErrorList) { + // field rbacv1alpha1.RoleRef.APIGroup has no validation // field rbacv1alpha1.RoleRef.Kind has no validation - // field rbacv1alpha1.RoleRef.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.RoleRef.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -267,23 +395,36 @@ func Validate_RoleRef(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *rbacv1alpha1.RoleRef) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.RoleRef) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } return errs } // Validate_Subject validates an instance of Subject according // to declarative validation rules in the API schema. -func Validate_Subject(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1alpha1.Subject) (errs field.ErrorList) { +func Validate_Subject( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1alpha1.Subject) (errs field.ErrorList) { + // field rbacv1alpha1.Subject.Kind has no validation // field rbacv1alpha1.Subject.APIVersion has no validation - // field rbacv1alpha1.Subject.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1alpha1.Subject.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -295,7 +436,13 @@ func Validate_Subject(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *rbacv1alpha1.Subject) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1alpha1.Subject) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } // field rbacv1alpha1.Subject.Namespace has no validation return errs diff --git a/pkg/apis/rbac/v1beta1/zz_generated.validations.go b/pkg/apis/rbac/v1beta1/zz_generated.validations.go index aad986260b8..471e3da3cbd 100644 --- a/pkg/apis/rbac/v1beta1/zz_generated.validations.go +++ b/pkg/apis/rbac/v1beta1/zz_generated.validations.go @@ -40,52 +40,87 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type ClusterRole - scheme.AddValidationFunc((*rbacv1beta1.ClusterRole)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ClusterRole(ctx, op, nil /* fldPath */, obj.(*rbacv1beta1.ClusterRole), safe.Cast[*rbacv1beta1.ClusterRole](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1beta1.ClusterRole)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ClusterRole( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1beta1.ClusterRole), + safe.Cast[*rbacv1beta1.ClusterRole](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ClusterRoleBinding - scheme.AddValidationFunc((*rbacv1beta1.ClusterRoleBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ClusterRoleBinding(ctx, op, nil /* fldPath */, obj.(*rbacv1beta1.ClusterRoleBinding), safe.Cast[*rbacv1beta1.ClusterRoleBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1beta1.ClusterRoleBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ClusterRoleBinding( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1beta1.ClusterRoleBinding), + safe.Cast[*rbacv1beta1.ClusterRoleBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Role - scheme.AddValidationFunc((*rbacv1beta1.Role)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Role(ctx, op, nil /* fldPath */, obj.(*rbacv1beta1.Role), safe.Cast[*rbacv1beta1.Role](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1beta1.Role)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Role( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1beta1.Role), + safe.Cast[*rbacv1beta1.Role](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type RoleBinding - scheme.AddValidationFunc((*rbacv1beta1.RoleBinding)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_RoleBinding(ctx, op, nil /* fldPath */, obj.(*rbacv1beta1.RoleBinding), safe.Cast[*rbacv1beta1.RoleBinding](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*rbacv1beta1.RoleBinding)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_RoleBinding( + ctx, op, nil, /* fldPath */ + obj.(*rbacv1beta1.RoleBinding), + safe.Cast[*rbacv1beta1.RoleBinding](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ClusterRole validates an instance of ClusterRole according // to declarative validation rules in the API schema. -func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1beta1.ClusterRole) (errs field.ErrorList) { +func Validate_ClusterRole( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1beta1.ClusterRole) (errs field.ErrorList) { + // field rbacv1beta1.ClusterRole.TypeMeta has no validation // field rbacv1beta1.ClusterRole.ObjectMeta has no validation - // field rbacv1beta1.ClusterRole.Rules - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1beta1.PolicyRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.ClusterRole.Rules + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1beta1.PolicyRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -96,9 +131,17 @@ func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("rules"), obj.Rules, safe.Field(oldObj, func(oldObj *rbacv1beta1.ClusterRole) []rbacv1beta1.PolicyRule { return oldObj.Rules }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.ClusterRole) []rbacv1beta1.PolicyRule { + return oldObj.Rules + }) + errs = append(errs, fn(fldPath.Child("rules"), obj.Rules, oldVal, oldObj != nil)...) + } // field rbacv1beta1.ClusterRole.AggregationRule has no validation return errs @@ -106,16 +149,23 @@ func Validate_ClusterRole(ctx context.Context, op operation.Operation, fldPath * // Validate_ClusterRoleBinding validates an instance of ClusterRoleBinding according // to declarative validation rules in the API schema. -func Validate_ClusterRoleBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1beta1.ClusterRoleBinding) (errs field.ErrorList) { +func Validate_ClusterRoleBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1beta1.ClusterRoleBinding) (errs field.ErrorList) { + // field rbacv1beta1.ClusterRoleBinding.TypeMeta has no validation // field rbacv1beta1.ClusterRoleBinding.ObjectMeta has no validation - // field rbacv1beta1.ClusterRoleBinding.Subjects - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1beta1.Subject, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.ClusterRoleBinding.Subjects + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1beta1.Subject, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -126,34 +176,59 @@ func Validate_ClusterRoleBinding(ctx context.Context, op operation.Operation, fl return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("subjects"), obj.Subjects, safe.Field(oldObj, func(oldObj *rbacv1beta1.ClusterRoleBinding) []rbacv1beta1.Subject { return oldObj.Subjects }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.ClusterRoleBinding) []rbacv1beta1.Subject { + return oldObj.Subjects + }) + errs = append(errs, fn(fldPath.Child("subjects"), obj.Subjects, oldVal, oldObj != nil)...) + } - // field rbacv1beta1.ClusterRoleBinding.RoleRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *rbacv1beta1.RoleRef, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.ClusterRoleBinding.RoleRef + fn := func( + fldPath *field.Path, + obj, oldObj *rbacv1beta1.RoleRef, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_RoleRef(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("roleRef"), &obj.RoleRef, safe.Field(oldObj, func(oldObj *rbacv1beta1.ClusterRoleBinding) *rbacv1beta1.RoleRef { return &oldObj.RoleRef }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.ClusterRoleBinding) *rbacv1beta1.RoleRef { + return &oldObj.RoleRef + }) + errs = append(errs, fn(fldPath.Child("roleRef"), &obj.RoleRef, oldVal, oldObj != nil)...) + } return errs } // Validate_PolicyRule validates an instance of PolicyRule according // to declarative validation rules in the API schema. -func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1beta1.PolicyRule) (errs field.ErrorList) { - // field rbacv1beta1.PolicyRule.Verbs - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_PolicyRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1beta1.PolicyRule) (errs field.ErrorList) { + + { // field rbacv1beta1.PolicyRule.Verbs + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -165,7 +240,13 @@ func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *f return // do not proceed } return - }(fldPath.Child("verbs"), obj.Verbs, safe.Field(oldObj, func(oldObj *rbacv1beta1.PolicyRule) []string { return oldObj.Verbs }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.PolicyRule) []string { + return oldObj.Verbs + }) + errs = append(errs, fn(fldPath.Child("verbs"), obj.Verbs, oldVal, oldObj != nil)...) + } // field rbacv1beta1.PolicyRule.APIGroups has no validation // field rbacv1beta1.PolicyRule.Resources has no validation @@ -176,16 +257,23 @@ func Validate_PolicyRule(ctx context.Context, op operation.Operation, fldPath *f // Validate_Role validates an instance of Role according // to declarative validation rules in the API schema. -func Validate_Role(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1beta1.Role) (errs field.ErrorList) { +func Validate_Role( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1beta1.Role) (errs field.ErrorList) { + // field rbacv1beta1.Role.TypeMeta has no validation // field rbacv1beta1.Role.ObjectMeta has no validation - // field rbacv1beta1.Role.Rules - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1beta1.PolicyRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.Role.Rules + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1beta1.PolicyRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -196,25 +284,40 @@ func Validate_Role(ctx context.Context, op operation.Operation, fldPath *field.P return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PolicyRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("rules"), obj.Rules, safe.Field(oldObj, func(oldObj *rbacv1beta1.Role) []rbacv1beta1.PolicyRule { return oldObj.Rules }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.Role) []rbacv1beta1.PolicyRule { + return oldObj.Rules + }) + errs = append(errs, fn(fldPath.Child("rules"), obj.Rules, oldVal, oldObj != nil)...) + } return errs } // Validate_RoleBinding validates an instance of RoleBinding according // to declarative validation rules in the API schema. -func Validate_RoleBinding(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1beta1.RoleBinding) (errs field.ErrorList) { +func Validate_RoleBinding( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1beta1.RoleBinding) (errs field.ErrorList) { + // field rbacv1beta1.RoleBinding.TypeMeta has no validation // field rbacv1beta1.RoleBinding.ObjectMeta has no validation - // field rbacv1beta1.RoleBinding.Subjects - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []rbacv1beta1.Subject, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.RoleBinding.Subjects + fn := func( + fldPath *field.Path, + obj, oldObj []rbacv1beta1.Subject, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -225,37 +328,62 @@ func Validate_RoleBinding(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Subject); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("subjects"), obj.Subjects, safe.Field(oldObj, func(oldObj *rbacv1beta1.RoleBinding) []rbacv1beta1.Subject { return oldObj.Subjects }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.RoleBinding) []rbacv1beta1.Subject { + return oldObj.Subjects + }) + errs = append(errs, fn(fldPath.Child("subjects"), obj.Subjects, oldVal, oldObj != nil)...) + } - // field rbacv1beta1.RoleBinding.RoleRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *rbacv1beta1.RoleRef, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.RoleBinding.RoleRef + fn := func( + fldPath *field.Path, + obj, oldObj *rbacv1beta1.RoleRef, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_RoleRef(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("roleRef"), &obj.RoleRef, safe.Field(oldObj, func(oldObj *rbacv1beta1.RoleBinding) *rbacv1beta1.RoleRef { return &oldObj.RoleRef }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.RoleBinding) *rbacv1beta1.RoleRef { + return &oldObj.RoleRef + }) + errs = append(errs, fn(fldPath.Child("roleRef"), &obj.RoleRef, oldVal, oldObj != nil)...) + } return errs } // Validate_RoleRef validates an instance of RoleRef according // to declarative validation rules in the API schema. -func Validate_RoleRef(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1beta1.RoleRef) (errs field.ErrorList) { +func Validate_RoleRef( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1beta1.RoleRef) (errs field.ErrorList) { + // field rbacv1beta1.RoleRef.APIGroup has no validation // field rbacv1beta1.RoleRef.Kind has no validation - // field rbacv1beta1.RoleRef.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.RoleRef.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -267,23 +395,36 @@ func Validate_RoleRef(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *rbacv1beta1.RoleRef) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.RoleRef) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } return errs } // Validate_Subject validates an instance of Subject according // to declarative validation rules in the API schema. -func Validate_Subject(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *rbacv1beta1.Subject) (errs field.ErrorList) { +func Validate_Subject( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *rbacv1beta1.Subject) (errs field.ErrorList) { + // field rbacv1beta1.Subject.Kind has no validation // field rbacv1beta1.Subject.APIGroup has no validation - // field rbacv1beta1.Subject.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field rbacv1beta1.Subject.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -295,7 +436,13 @@ func Validate_Subject(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *rbacv1beta1.Subject) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *rbacv1beta1.Subject) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } // field rbacv1beta1.Subject.Namespace has no validation return errs diff --git a/pkg/apis/resource/v1/zz_generated.validations.go b/pkg/apis/resource/v1/zz_generated.validations.go index e33cf7a547d..c1c34ebb14f 100644 --- a/pkg/apis/resource/v1/zz_generated.validations.go +++ b/pkg/apis/resource/v1/zz_generated.validations.go @@ -43,53 +43,88 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type DeviceClass - scheme.AddValidationFunc((*resourcev1.DeviceClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_DeviceClass(ctx, op, nil /* fldPath */, obj.(*resourcev1.DeviceClass), safe.Cast[*resourcev1.DeviceClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1.DeviceClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_DeviceClass( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1.DeviceClass), + safe.Cast[*resourcev1.DeviceClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceClaim - scheme.AddValidationFunc((*resourcev1.ResourceClaim)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_ResourceClaim(ctx, op, nil /* fldPath */, obj.(*resourcev1.ResourceClaim), safe.Cast[*resourcev1.ResourceClaim](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1.ResourceClaim)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_ResourceClaim( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1.ResourceClaim), + safe.Cast[*resourcev1.ResourceClaim](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceClaimTemplate - scheme.AddValidationFunc((*resourcev1.ResourceClaimTemplate)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ResourceClaimTemplate(ctx, op, nil /* fldPath */, obj.(*resourcev1.ResourceClaimTemplate), safe.Cast[*resourcev1.ResourceClaimTemplate](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1.ResourceClaimTemplate)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ResourceClaimTemplate( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1.ResourceClaimTemplate), + safe.Cast[*resourcev1.ResourceClaimTemplate](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceSlice - scheme.AddValidationFunc((*resourcev1.ResourceSlice)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ResourceSlice(ctx, op, nil /* fldPath */, obj.(*resourcev1.ResourceSlice), safe.Cast[*resourcev1.ResourceSlice](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1.ResourceSlice)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ResourceSlice( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1.ResourceSlice), + safe.Cast[*resourcev1.ResourceSlice](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_AllocatedDeviceStatus validates an instance of AllocatedDeviceStatus according // to declarative validation rules in the API schema. -func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.AllocatedDeviceStatus) (errs field.ErrorList) { +func Validate_AllocatedDeviceStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.AllocatedDeviceStatus) (errs field.ErrorList) { + // field resourcev1.AllocatedDeviceStatus.Driver has no validation // field resourcev1.AllocatedDeviceStatus.Pool has no validation // field resourcev1.AllocatedDeviceStatus.Device has no validation - // field resourcev1.AllocatedDeviceStatus.ShareID - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.AllocatedDeviceStatus.ShareID + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -99,19 +134,31 @@ func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shareID"), obj.ShareID, safe.Field(oldObj, func(oldObj *resourcev1.AllocatedDeviceStatus) *string { return oldObj.ShareID }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.AllocatedDeviceStatus) *string { + return oldObj.ShareID + }) + errs = append(errs, fn(fldPath.Child("shareID"), obj.ShareID, oldVal, oldObj != nil)...) + } // field resourcev1.AllocatedDeviceStatus.Conditions has no validation // field resourcev1.AllocatedDeviceStatus.Data has no validation - // field resourcev1.AllocatedDeviceStatus.NetworkData - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.NetworkDeviceData, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.AllocatedDeviceStatus.NetworkData + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.NetworkDeviceData, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -124,9 +171,13 @@ func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, // call the type's validation function errs = append(errs, Validate_NetworkDeviceData(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("networkData"), obj.NetworkData, safe.Field(oldObj, func(oldObj *resourcev1.AllocatedDeviceStatus) *resourcev1.NetworkDeviceData { - return oldObj.NetworkData - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.AllocatedDeviceStatus) *resourcev1.NetworkDeviceData { + return oldObj.NetworkData + }) + errs = append(errs, fn(fldPath.Child("networkData"), obj.NetworkData, oldVal, oldObj != nil)...) + } return errs } @@ -135,26 +186,44 @@ var symbolsForAllocationConfigSource = sets.New(resourcev1.AllocationConfigSourc // Validate_AllocationConfigSource validates an instance of AllocationConfigSource according // to declarative validation rules in the API schema. -func Validate_AllocationConfigSource(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.AllocationConfigSource) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAllocationConfigSource, nil).MarkAlpha()...) +func Validate_AllocationConfigSource( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.AllocationConfigSource) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAllocationConfigSource, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_AllocationResult validates an instance of AllocationResult according // to declarative validation rules in the API schema. -func Validate_AllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.AllocationResult) (errs field.ErrorList) { - // field resourcev1.AllocationResult.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceAllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_AllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.AllocationResult) (errs field.ErrorList) { + + { // field resourcev1.AllocationResult.Devices + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceAllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceAllocationResult(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("devices"), &obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1.AllocationResult) *resourcev1.DeviceAllocationResult { return &oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.AllocationResult) *resourcev1.DeviceAllocationResult { + return &oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), &obj.Devices, oldVal, oldObj != nil)...) + } // field resourcev1.AllocationResult.NodeSelector has no validation // field resourcev1.AllocationResult.AllocationTimestamp has no validation @@ -163,13 +232,20 @@ func Validate_AllocationResult(ctx context.Context, op operation.Operation, fldP // Validate_CounterSet validates an instance of CounterSet according // to declarative validation rules in the API schema. -func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.CounterSet) (errs field.ErrorList) { - // field resourcev1.CounterSet.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_CounterSet( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.CounterSet) (errs field.ErrorList) { + + { // field resourcev1.CounterSet.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -180,16 +256,28 @@ func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *resourcev1.CounterSet) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.CounterSet) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } - // field resourcev1.CounterSet.Counters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]resourcev1.Counter, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.CounterSet.Counters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]resourcev1.Counter, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -200,24 +288,39 @@ func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counters"), obj.Counters, safe.Field(oldObj, func(oldObj *resourcev1.CounterSet) map[string]resourcev1.Counter { return oldObj.Counters }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.CounterSet) map[string]resourcev1.Counter { + return oldObj.Counters + }) + errs = append(errs, fn(fldPath.Child("counters"), obj.Counters, oldVal, oldObj != nil)...) + } return errs } // Validate_Device validates an instance of Device according // to declarative validation rules in the API schema. -func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.Device) (errs field.ErrorList) { +func Validate_Device( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.Device) (errs field.ErrorList) { + // field resourcev1.Device.Name has no validation - // field resourcev1.Device.Attributes - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[resourcev1.QualifiedName]resourcev1.DeviceAttribute, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.Device.Attributes + fn := func( + fldPath *field.Path, + obj, oldObj map[resourcev1.QualifiedName]resourcev1.DeviceAttribute, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -228,20 +331,30 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_DeviceAttribute)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_DeviceAttribute); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("attributes"), obj.Attributes, safe.Field(oldObj, func(oldObj *resourcev1.Device) map[resourcev1.QualifiedName]resourcev1.DeviceAttribute { - return oldObj.Attributes - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.Device) map[resourcev1.QualifiedName]resourcev1.DeviceAttribute { + return oldObj.Attributes + }) + errs = append(errs, fn(fldPath.Child("attributes"), obj.Attributes, oldVal, oldObj != nil)...) + } // field resourcev1.Device.Capacity has no validation - // field resourcev1.Device.ConsumesCounters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceCounterConsumption, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.Device.ConsumesCounters + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceCounterConsumption, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -256,26 +369,42 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1.DeviceCounterConsumption, b resourcev1.DeviceCounterConsumption) bool { - return a.CounterSet == b.CounterSet - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.DeviceCounterConsumption, b resourcev1.DeviceCounterConsumption) bool { + return a.CounterSet == b.CounterSet + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1.DeviceCounterConsumption, b resourcev1.DeviceCounterConsumption) bool { - return a.CounterSet == b.CounterSet - }, validate.SemanticDeepEqual, Validate_DeviceCounterConsumption)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.DeviceCounterConsumption, b resourcev1.DeviceCounterConsumption) bool { + return a.CounterSet == b.CounterSet + }, validate.SemanticDeepEqual, Validate_DeviceCounterConsumption); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("consumesCounters"), obj.ConsumesCounters, safe.Field(oldObj, func(oldObj *resourcev1.Device) []resourcev1.DeviceCounterConsumption { return oldObj.ConsumesCounters }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.Device) []resourcev1.DeviceCounterConsumption { + return oldObj.ConsumesCounters + }) + errs = append(errs, fn(fldPath.Child("consumesCounters"), obj.ConsumesCounters, oldVal, oldObj != nil)...) + } // field resourcev1.Device.NodeName has no validation // field resourcev1.Device.NodeSelector has no validation // field resourcev1.Device.AllNodes has no validation - // field resourcev1.Device.Taints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceTaint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.Device.Taints + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceTaint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -286,18 +415,30 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceTaint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceTaint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("taints"), obj.Taints, safe.Field(oldObj, func(oldObj *resourcev1.Device) []resourcev1.DeviceTaint { return oldObj.Taints }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.Device) []resourcev1.DeviceTaint { + return oldObj.Taints + }) + errs = append(errs, fn(fldPath.Child("taints"), obj.Taints, oldVal, oldObj != nil)...) + } // field resourcev1.Device.BindsToNode has no validation - // field resourcev1.Device.BindingConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.Device.BindingConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -312,14 +453,24 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("bindingConditions"), obj.BindingConditions, safe.Field(oldObj, func(oldObj *resourcev1.Device) []string { return oldObj.BindingConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.Device) []string { + return oldObj.BindingConditions + }) + errs = append(errs, fn(fldPath.Child("bindingConditions"), obj.BindingConditions, oldVal, oldObj != nil)...) + } - // field resourcev1.Device.BindingFailureConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.Device.BindingFailureConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -334,7 +485,13 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, safe.Field(oldObj, func(oldObj *resourcev1.Device) []string { return oldObj.BindingFailureConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.Device) []string { + return oldObj.BindingFailureConditions + }) + errs = append(errs, fn(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, oldVal, oldObj != nil)...) + } // field resourcev1.Device.AllowMultipleAllocations has no validation // field resourcev1.Device.NodeAllocatableResourceMappings has no validation @@ -343,13 +500,20 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field // Validate_DeviceAllocationConfiguration validates an instance of DeviceAllocationConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceAllocationConfiguration) (errs field.ErrorList) { - // field resourcev1.DeviceAllocationConfiguration.Source - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.AllocationConfigSource, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceAllocationConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceAllocationConfiguration) (errs field.ErrorList) { + + { // field resourcev1.DeviceAllocationConfiguration.Source + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.AllocationConfigSource, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -363,16 +527,24 @@ func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Op // call the type's validation function errs = append(errs, Validate_AllocationConfigSource(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("source"), &obj.Source, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAllocationConfiguration) *resourcev1.AllocationConfigSource { - return &oldObj.Source - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAllocationConfiguration) *resourcev1.AllocationConfigSource { + return &oldObj.Source + }) + errs = append(errs, fn(fldPath.Child("source"), &obj.Source, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAllocationConfiguration.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAllocationConfiguration.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -387,23 +559,39 @@ func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Op return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAllocationConfiguration) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAllocationConfiguration) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAllocationConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAllocationConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAllocationConfiguration) *resourcev1.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAllocationConfiguration) *resourcev1.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } @@ -412,21 +600,33 @@ var symbolsForDeviceAllocationMode = sets.New(resourcev1.DeviceAllocationModeAll // Validate_DeviceAllocationMode validates an instance of DeviceAllocationMode according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationMode(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceAllocationMode) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceAllocationMode, nil).MarkAlpha()...) +func Validate_DeviceAllocationMode( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceAllocationMode) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceAllocationMode, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DeviceAllocationResult validates an instance of DeviceAllocationResult according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceAllocationResult) (errs field.ErrorList) { - // field resourcev1.DeviceAllocationResult.Results - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceRequestAllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceAllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceAllocationResult) (errs field.ErrorList) { + + { // field resourcev1.DeviceAllocationResult.Results + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceRequestAllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -441,18 +641,28 @@ func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceRequestAllocationResult)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceRequestAllocationResult); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("results"), obj.Results, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAllocationResult) []resourcev1.DeviceRequestAllocationResult { - return oldObj.Results - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAllocationResult) []resourcev1.DeviceRequestAllocationResult { + return oldObj.Results + }) + errs = append(errs, fn(fldPath.Child("results"), obj.Results, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAllocationResult.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceAllocationConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAllocationResult.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceAllocationConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -467,11 +677,17 @@ func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceAllocationConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceAllocationConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAllocationResult) []resourcev1.DeviceAllocationConfiguration { - return oldObj.Config - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAllocationResult) []resourcev1.DeviceAllocationConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } return errs } @@ -480,55 +696,72 @@ var unionMembershipFor_k8s_io_api_resource_v1_DeviceAttribute_ = validate.NewUni // Validate_DeviceAttribute validates an instance of DeviceAttribute according // to declarative validation rules in the API schema. -func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceAttribute) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_resource_v1_DeviceAttribute_, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.IntValue != nil - }, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.BoolValue != nil - }, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.StringValue != nil - }, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.VersionValue != nil - }, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.IntValues) != 0 - }, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.BoolValues) != 0 - }, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.StringValues) != 0 - }, func(obj *resourcev1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.VersionValues) != 0 - }).MarkAlpha()...) +func Validate_DeviceAttribute( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceAttribute) (errs field.ErrorList) { - // field resourcev1.DeviceAttribute.IntValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int64, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_resource_v1_DeviceAttribute_, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.IntValue != nil + }, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.BoolValue != nil + }, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.StringValue != nil + }, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.VersionValue != nil + }, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.IntValues) != 0 + }, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.BoolValues) != 0 + }, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.StringValues) != 0 + }, + func(obj *resourcev1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.VersionValues) != 0 + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + + { // field resourcev1.DeviceAttribute.IntValue + fn := func( + fldPath *field.Path, + obj, oldObj *int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -539,14 +772,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("int"), obj.IntValue, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) *int64 { return oldObj.IntValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) *int64 { + return oldObj.IntValue + }) + errs = append(errs, fn(fldPath.Child("int"), obj.IntValue, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAttribute.BoolValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAttribute.BoolValue + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -557,14 +800,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("bool"), obj.BoolValue, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) *bool { return oldObj.BoolValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) *bool { + return oldObj.BoolValue + }) + errs = append(errs, fn(fldPath.Child("bool"), obj.BoolValue, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAttribute.StringValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAttribute.StringValue + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -575,14 +828,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("string"), obj.StringValue, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) *string { return oldObj.StringValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) *string { + return oldObj.StringValue + }) + errs = append(errs, fn(fldPath.Child("string"), obj.StringValue, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAttribute.VersionValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAttribute.VersionValue + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -593,14 +856,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("version"), obj.VersionValue, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) *string { return oldObj.VersionValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) *string { + return oldObj.VersionValue + }) + errs = append(errs, fn(fldPath.Child("version"), obj.VersionValue, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAttribute.IntValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAttribute.IntValues + fn := func( + fldPath *field.Path, + obj, oldObj []int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -611,14 +884,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("ints"), obj.IntValues, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) []int64 { return oldObj.IntValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) []int64 { + return oldObj.IntValues + }) + errs = append(errs, fn(fldPath.Child("ints"), obj.IntValues, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAttribute.BoolValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAttribute.BoolValues + fn := func( + fldPath *field.Path, + obj, oldObj []bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -629,14 +912,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("bools"), obj.BoolValues, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) []bool { return oldObj.BoolValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) []bool { + return oldObj.BoolValues + }) + errs = append(errs, fn(fldPath.Child("bools"), obj.BoolValues, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAttribute.StringValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAttribute.StringValues + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -647,14 +940,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("strings"), obj.StringValues, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) []string { return oldObj.StringValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) []string { + return oldObj.StringValues + }) + errs = append(errs, fn(fldPath.Child("strings"), obj.StringValues, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceAttribute.VersionValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceAttribute.VersionValues + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -665,20 +968,33 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("versions"), obj.VersionValues, safe.Field(oldObj, func(oldObj *resourcev1.DeviceAttribute) []string { return oldObj.VersionValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceAttribute) []string { + return oldObj.VersionValues + }) + errs = append(errs, fn(fldPath.Child("versions"), obj.VersionValues, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClaim validates an instance of DeviceClaim according // to declarative validation rules in the API schema. -func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceClaim) (errs field.ErrorList) { - // field resourcev1.DeviceClaim.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceRequest, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClaim( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceClaim) (errs field.ErrorList) { + + { // field resourcev1.DeviceClaim.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -693,18 +1009,34 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1.DeviceRequest, b resourcev1.DeviceRequest) bool { return a.Name == b.Name }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.DeviceRequest, b resourcev1.DeviceRequest) bool { return a.Name == b.Name }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1.DeviceRequest, b resourcev1.DeviceRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceRequest)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.DeviceRequest, b resourcev1.DeviceRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceRequest); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClaim) []resourcev1.DeviceRequest { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClaim) []resourcev1.DeviceRequest { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceClaim.Constraints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceConstraint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceClaim.Constraints + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceConstraint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -719,16 +1051,28 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceConstraint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceConstraint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("constraints"), obj.Constraints, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClaim) []resourcev1.DeviceConstraint { return oldObj.Constraints }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClaim) []resourcev1.DeviceConstraint { + return oldObj.Constraints + }) + errs = append(errs, fn(fldPath.Child("constraints"), obj.Constraints, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceClaim.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceClaimConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceClaim.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceClaimConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -743,22 +1087,37 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClaimConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClaimConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClaim) []resourcev1.DeviceClaimConfiguration { return oldObj.Config }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClaim) []resourcev1.DeviceClaimConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClaimConfiguration validates an instance of DeviceClaimConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceClaimConfiguration) (errs field.ErrorList) { - // field resourcev1.DeviceClaimConfiguration.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClaimConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceClaimConfiguration) (errs field.ErrorList) { + + { // field resourcev1.DeviceClaimConfiguration.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -773,97 +1132,158 @@ func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operati return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClaimConfiguration) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClaimConfiguration) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceClaimConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceClaimConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClaimConfiguration) *resourcev1.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClaimConfiguration) *resourcev1.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClass validates an instance of DeviceClass according // to declarative validation rules in the API schema. -func Validate_DeviceClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceClass) (errs field.ErrorList) { +func Validate_DeviceClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceClass) (errs field.ErrorList) { + // field resourcev1.DeviceClass.TypeMeta has no validation - // field resourcev1.DeviceClass.ObjectMeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *metav1.ObjectMeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceClass.ObjectMeta + fn := func( + fldPath *field.Path, + obj, oldObj *metav1.ObjectMeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort name + func() { // cohort = "name" earlyReturn := false - if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { earlyReturn = true } if earlyReturn { return // do not proceed } - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha()...) + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *metav1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("metadata"), &obj.ObjectMeta, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClass) *metav1.ObjectMeta { return &oldObj.ObjectMeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClass) *metav1.ObjectMeta { + return &oldObj.ObjectMeta + }) + errs = append(errs, fn(fldPath.Child("metadata"), &obj.ObjectMeta, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceClass.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceClassSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceClass.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceClassSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceClassSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClass) *resourcev1.DeviceClassSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClass) *resourcev1.DeviceClassSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClassConfiguration validates an instance of DeviceClassConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceClassConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceClassConfiguration) (errs field.ErrorList) { - // field resourcev1.DeviceClassConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClassConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceClassConfiguration) (errs field.ErrorList) { + + { // field resourcev1.DeviceClassConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClassConfiguration) *resourcev1.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClassConfiguration) *resourcev1.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClassSpec validates an instance of DeviceClassSpec according // to declarative validation rules in the API schema. -func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceClassSpec) (errs field.ErrorList) { - // field resourcev1.DeviceClassSpec.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClassSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceClassSpec) (errs field.ErrorList) { + + { // field resourcev1.DeviceClassSpec.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -878,14 +1298,24 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClassSpec) []resourcev1.DeviceSelector { return oldObj.Selectors }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClassSpec) []resourcev1.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceClassSpec.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceClassConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceClassSpec.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceClassConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -900,16 +1330,28 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClassConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClassConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClassSpec) []resourcev1.DeviceClassConfiguration { return oldObj.Config }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClassSpec) []resourcev1.DeviceClassConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceClassSpec.ExtendedResourceName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceClassSpec.ExtendedResourceName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -919,22 +1361,37 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa if earlyReturn { return // do not proceed } - errs = append(errs, validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("extendedResourceName"), obj.ExtendedResourceName, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClassSpec) *string { return oldObj.ExtendedResourceName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceClassSpec) *string { + return oldObj.ExtendedResourceName + }) + errs = append(errs, fn(fldPath.Child("extendedResourceName"), obj.ExtendedResourceName, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceConfiguration validates an instance of DeviceConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceConfiguration) (errs field.ErrorList) { - // field resourcev1.DeviceConfiguration.Opaque - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.OpaqueDeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceConfiguration) (errs field.ErrorList) { + + { // field resourcev1.DeviceConfiguration.Opaque + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.OpaqueDeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -947,22 +1404,33 @@ func Validate_DeviceConfiguration(ctx context.Context, op operation.Operation, f // call the type's validation function errs = append(errs, Validate_OpaqueDeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("opaque"), obj.Opaque, safe.Field(oldObj, func(oldObj *resourcev1.DeviceConfiguration) *resourcev1.OpaqueDeviceConfiguration { - return oldObj.Opaque - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceConfiguration) *resourcev1.OpaqueDeviceConfiguration { + return oldObj.Opaque + }) + errs = append(errs, fn(fldPath.Child("opaque"), obj.Opaque, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceConstraint validates an instance of DeviceConstraint according // to declarative validation rules in the API schema. -func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceConstraint) (errs field.ErrorList) { - // field resourcev1.DeviceConstraint.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceConstraint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceConstraint) (errs field.ErrorList) { + + { // field resourcev1.DeviceConstraint.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -977,16 +1445,28 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1.DeviceConstraint) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceConstraint) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceConstraint.MatchAttribute - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.FullyQualifiedName, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceConstraint.MatchAttribute + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.FullyQualifiedName, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -996,9 +1476,17 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("matchAttribute"), obj.MatchAttribute, safe.Field(oldObj, func(oldObj *resourcev1.DeviceConstraint) *resourcev1.FullyQualifiedName { return oldObj.MatchAttribute }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceConstraint) *resourcev1.FullyQualifiedName { + return oldObj.MatchAttribute + }) + errs = append(errs, fn(fldPath.Child("matchAttribute"), obj.MatchAttribute, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceConstraint.DistinctAttribute has no validation return errs @@ -1006,13 +1494,20 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP // Validate_DeviceCounterConsumption validates an instance of DeviceCounterConsumption according // to declarative validation rules in the API schema. -func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceCounterConsumption) (errs field.ErrorList) { - // field resourcev1.DeviceCounterConsumption.CounterSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceCounterConsumption( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceCounterConsumption) (errs field.ErrorList) { + + { // field resourcev1.DeviceCounterConsumption.CounterSet + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1023,16 +1518,28 @@ func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counterSet"), &obj.CounterSet, safe.Field(oldObj, func(oldObj *resourcev1.DeviceCounterConsumption) *string { return &oldObj.CounterSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceCounterConsumption) *string { + return &oldObj.CounterSet + }) + errs = append(errs, fn(fldPath.Child("counterSet"), &obj.CounterSet, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceCounterConsumption.Counters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]resourcev1.Counter, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceCounterConsumption.Counters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]resourcev1.Counter, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1043,26 +1550,39 @@ func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counters"), obj.Counters, safe.Field(oldObj, func(oldObj *resourcev1.DeviceCounterConsumption) map[string]resourcev1.Counter { - return oldObj.Counters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceCounterConsumption) map[string]resourcev1.Counter { + return oldObj.Counters + }) + errs = append(errs, fn(fldPath.Child("counters"), obj.Counters, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceRequest validates an instance of DeviceRequest according // to declarative validation rules in the API schema. -func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceRequest) (errs field.ErrorList) { +func Validate_DeviceRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceRequest) (errs field.ErrorList) { + // field resourcev1.DeviceRequest.Name has no validation - // field resourcev1.DeviceRequest.Exactly - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.ExactDeviceRequest, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequest.Exactly + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.ExactDeviceRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1075,14 +1595,24 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_ExactDeviceRequest(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("exactly"), obj.Exactly, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequest) *resourcev1.ExactDeviceRequest { return oldObj.Exactly }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequest) *resourcev1.ExactDeviceRequest { + return oldObj.Exactly + }) + errs = append(errs, fn(fldPath.Child("exactly"), obj.Exactly, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceRequest.FirstAvailable - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceSubRequest, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequest.FirstAvailable + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceSubRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1097,26 +1627,45 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1.DeviceSubRequest, b resourcev1.DeviceSubRequest) bool { return a.Name == b.Name }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.DeviceSubRequest, b resourcev1.DeviceSubRequest) bool { return a.Name == b.Name }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1.DeviceSubRequest, b resourcev1.DeviceSubRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceSubRequest)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.DeviceSubRequest, b resourcev1.DeviceSubRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceSubRequest); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("firstAvailable"), obj.FirstAvailable, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequest) []resourcev1.DeviceSubRequest { return oldObj.FirstAvailable }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequest) []resourcev1.DeviceSubRequest { + return oldObj.FirstAvailable + }) + errs = append(errs, fn(fldPath.Child("firstAvailable"), obj.FirstAvailable, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceRequestAllocationResult validates an instance of DeviceRequestAllocationResult according // to declarative validation rules in the API schema. -func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceRequestAllocationResult) (errs field.ErrorList) { +func Validate_DeviceRequestAllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceRequestAllocationResult) (errs field.ErrorList) { + // field resourcev1.DeviceRequestAllocationResult.Request has no validation - // field resourcev1.DeviceRequestAllocationResult.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequestAllocationResult.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1127,17 +1676,31 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequestAllocationResult) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequestAllocationResult) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceRequestAllocationResult.Pool - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequestAllocationResult.Pool + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1148,19 +1711,31 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pool"), &obj.Pool, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequestAllocationResult) *string { return &oldObj.Pool }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequestAllocationResult) *string { + return &oldObj.Pool + }) + errs = append(errs, fn(fldPath.Child("pool"), &obj.Pool, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceRequestAllocationResult.Device has no validation // field resourcev1.DeviceRequestAllocationResult.AdminAccess has no validation - // field resourcev1.DeviceRequestAllocationResult.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequestAllocationResult.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1171,18 +1746,28 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequestAllocationResult) []resourcev1.DeviceToleration { - return oldObj.Tolerations - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequestAllocationResult) []resourcev1.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceRequestAllocationResult.BindingConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequestAllocationResult.BindingConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1197,14 +1782,24 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } return - }(fldPath.Child("bindingConditions"), obj.BindingConditions, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequestAllocationResult) []string { return oldObj.BindingConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequestAllocationResult) []string { + return oldObj.BindingConditions + }) + errs = append(errs, fn(fldPath.Child("bindingConditions"), obj.BindingConditions, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceRequestAllocationResult.BindingFailureConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequestAllocationResult.BindingFailureConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1219,16 +1814,24 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } return - }(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequestAllocationResult) []string { - return oldObj.BindingFailureConditions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequestAllocationResult) []string { + return oldObj.BindingFailureConditions + }) + errs = append(errs, fn(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceRequestAllocationResult.ShareID - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *types.UID, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceRequestAllocationResult.ShareID + fn := func( + fldPath *field.Path, + obj, oldObj *types.UID, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1238,9 +1841,17 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shareID"), obj.ShareID, safe.Field(oldObj, func(oldObj *resourcev1.DeviceRequestAllocationResult) *types.UID { return oldObj.ShareID }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceRequestAllocationResult) *types.UID { + return oldObj.ShareID + }) + errs = append(errs, fn(fldPath.Child("shareID"), obj.ShareID, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceRequestAllocationResult.ConsumedCapacity has no validation return errs @@ -1248,15 +1859,22 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op // Validate_DeviceSubRequest validates an instance of DeviceSubRequest according // to declarative validation rules in the API schema. -func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceSubRequest) (errs field.ErrorList) { +func Validate_DeviceSubRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceSubRequest) (errs field.ErrorList) { + // field resourcev1.DeviceSubRequest.Name has no validation - // field resourcev1.DeviceSubRequest.DeviceClassName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceSubRequest.DeviceClassName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1267,16 +1885,28 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("deviceClassName"), &obj.DeviceClassName, safe.Field(oldObj, func(oldObj *resourcev1.DeviceSubRequest) *string { return &oldObj.DeviceClassName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceSubRequest) *string { + return &oldObj.DeviceClassName + }) + errs = append(errs, fn(fldPath.Child("deviceClassName"), &obj.DeviceClassName, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceSubRequest.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceSubRequest.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1291,14 +1921,24 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1.DeviceSubRequest) []resourcev1.DeviceSelector { return oldObj.Selectors }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceSubRequest) []resourcev1.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceSubRequest.AllocationMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceAllocationMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceSubRequest.AllocationMode + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceAllocationMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1311,18 +1951,26 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceAllocationMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocationMode"), &obj.AllocationMode, safe.Field(oldObj, func(oldObj *resourcev1.DeviceSubRequest) *resourcev1.DeviceAllocationMode { - return &oldObj.AllocationMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceSubRequest) *resourcev1.DeviceAllocationMode { + return &oldObj.AllocationMode + }) + errs = append(errs, fn(fldPath.Child("allocationMode"), &obj.AllocationMode, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceSubRequest.Count has no validation - // field resourcev1.DeviceSubRequest.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceSubRequest.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1333,9 +1981,17 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1.DeviceSubRequest) []resourcev1.DeviceToleration { return oldObj.Tolerations }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceSubRequest) []resourcev1.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceSubRequest.Capacity has no validation return errs @@ -1343,16 +1999,23 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP // Validate_DeviceTaint validates an instance of DeviceTaint according // to declarative validation rules in the API schema. -func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceTaint) (errs field.ErrorList) { +func Validate_DeviceTaint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceTaint) (errs field.ErrorList) { + // field resourcev1.DeviceTaint.Key has no validation // field resourcev1.DeviceTaint.Value has no validation - // field resourcev1.DeviceTaint.Effect - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceTaintEffect, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceTaint.Effect + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceTaintEffect, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1366,7 +2029,13 @@ func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath * // call the type's validation function errs = append(errs, Validate_DeviceTaintEffect(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("effect"), &obj.Effect, safe.Field(oldObj, func(oldObj *resourcev1.DeviceTaint) *resourcev1.DeviceTaintEffect { return &oldObj.Effect }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceTaint) *resourcev1.DeviceTaintEffect { + return &oldObj.Effect + }) + errs = append(errs, fn(fldPath.Child("effect"), &obj.Effect, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceTaint.TimeAdded has no validation return errs @@ -1376,21 +2045,33 @@ var symbolsForDeviceTaintEffect = sets.New(resourcev1.DeviceTaintEffectNoExecute // Validate_DeviceTaintEffect validates an instance of DeviceTaintEffect according // to declarative validation rules in the API schema. -func Validate_DeviceTaintEffect(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceTaintEffect) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil).MarkAlpha()...) +func Validate_DeviceTaintEffect( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceTaintEffect) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DeviceToleration validates an instance of DeviceToleration according // to declarative validation rules in the API schema. -func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceToleration) (errs field.ErrorList) { - // field resourcev1.DeviceToleration.Key - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceToleration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceToleration) (errs field.ErrorList) { + + { // field resourcev1.DeviceToleration.Key + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1400,16 +2081,28 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.LabelKey(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.LabelKey(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("key"), &obj.Key, safe.Field(oldObj, func(oldObj *resourcev1.DeviceToleration) *string { return &oldObj.Key }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceToleration) *string { + return &oldObj.Key + }) + errs = append(errs, fn(fldPath.Child("key"), &obj.Key, oldVal, oldObj != nil)...) + } - // field resourcev1.DeviceToleration.Operator - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceTolerationOperator, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceToleration.Operator + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceTolerationOperator, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1424,18 +2117,26 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceTolerationOperator(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("operator"), &obj.Operator, safe.Field(oldObj, func(oldObj *resourcev1.DeviceToleration) *resourcev1.DeviceTolerationOperator { - return &oldObj.Operator - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceToleration) *resourcev1.DeviceTolerationOperator { + return &oldObj.Operator + }) + errs = append(errs, fn(fldPath.Child("operator"), &obj.Operator, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceToleration.Value has no validation - // field resourcev1.DeviceToleration.Effect - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceTaintEffect, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.DeviceToleration.Effect + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceTaintEffect, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1448,7 +2149,13 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceTaintEffect(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("effect"), &obj.Effect, safe.Field(oldObj, func(oldObj *resourcev1.DeviceToleration) *resourcev1.DeviceTaintEffect { return &oldObj.Effect }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.DeviceToleration) *resourcev1.DeviceTaintEffect { + return &oldObj.Effect + }) + errs = append(errs, fn(fldPath.Child("effect"), &obj.Effect, oldVal, oldObj != nil)...) + } // field resourcev1.DeviceToleration.TolerationSeconds has no validation return errs @@ -1458,23 +2165,35 @@ var symbolsForDeviceTolerationOperator = sets.New(resourcev1.DeviceTolerationOpE // Validate_DeviceTolerationOperator validates an instance of DeviceTolerationOperator according // to declarative validation rules in the API schema. -func Validate_DeviceTolerationOperator(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.DeviceTolerationOperator) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTolerationOperator, nil).MarkAlpha()...) +func Validate_DeviceTolerationOperator( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.DeviceTolerationOperator) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTolerationOperator, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ExactDeviceRequest validates an instance of ExactDeviceRequest according // to declarative validation rules in the API schema. -func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ExactDeviceRequest) (errs field.ErrorList) { +func Validate_ExactDeviceRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ExactDeviceRequest) (errs field.ErrorList) { + // field resourcev1.ExactDeviceRequest.DeviceClassName has no validation - // field resourcev1.ExactDeviceRequest.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ExactDeviceRequest.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1489,14 +2208,24 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1.ExactDeviceRequest) []resourcev1.DeviceSelector { return oldObj.Selectors }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ExactDeviceRequest) []resourcev1.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1.ExactDeviceRequest.AllocationMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceAllocationMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ExactDeviceRequest.AllocationMode + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceAllocationMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1509,19 +2238,27 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl // call the type's validation function errs = append(errs, Validate_DeviceAllocationMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocationMode"), &obj.AllocationMode, safe.Field(oldObj, func(oldObj *resourcev1.ExactDeviceRequest) *resourcev1.DeviceAllocationMode { - return &oldObj.AllocationMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ExactDeviceRequest) *resourcev1.DeviceAllocationMode { + return &oldObj.AllocationMode + }) + errs = append(errs, fn(fldPath.Child("allocationMode"), &obj.AllocationMode, oldVal, oldObj != nil)...) + } // field resourcev1.ExactDeviceRequest.Count has no validation // field resourcev1.ExactDeviceRequest.AdminAccess has no validation - // field resourcev1.ExactDeviceRequest.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ExactDeviceRequest.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1532,9 +2269,17 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1.ExactDeviceRequest) []resourcev1.DeviceToleration { return oldObj.Tolerations }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ExactDeviceRequest) []resourcev1.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } // field resourcev1.ExactDeviceRequest.Capacity has no validation return errs @@ -1542,13 +2287,20 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl // Validate_NetworkDeviceData validates an instance of NetworkDeviceData according // to declarative validation rules in the API schema. -func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.NetworkDeviceData) (errs field.ErrorList) { - // field resourcev1.NetworkDeviceData.InterfaceName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_NetworkDeviceData( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.NetworkDeviceData) (errs field.ErrorList) { + + { // field resourcev1.NetworkDeviceData.InterfaceName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1558,16 +2310,28 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256).MarkAlpha()...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("interfaceName"), &obj.InterfaceName, safe.Field(oldObj, func(oldObj *resourcev1.NetworkDeviceData) *string { return &oldObj.InterfaceName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.NetworkDeviceData) *string { + return &oldObj.InterfaceName + }) + errs = append(errs, fn(fldPath.Child("interfaceName"), &obj.InterfaceName, oldVal, oldObj != nil)...) + } - // field resourcev1.NetworkDeviceData.IPs - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.NetworkDeviceData.IPs + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1582,16 +2346,28 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ips"), obj.IPs, safe.Field(oldObj, func(oldObj *resourcev1.NetworkDeviceData) []string { return oldObj.IPs }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.NetworkDeviceData) []string { + return oldObj.IPs + }) + errs = append(errs, fn(fldPath.Child("ips"), obj.IPs, oldVal, oldObj != nil)...) + } - // field resourcev1.NetworkDeviceData.HardwareAddress - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.NetworkDeviceData.HardwareAddress + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1601,22 +2377,37 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 128).MarkAlpha()...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 128).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("hardwareAddress"), &obj.HardwareAddress, safe.Field(oldObj, func(oldObj *resourcev1.NetworkDeviceData) *string { return &oldObj.HardwareAddress }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.NetworkDeviceData) *string { + return &oldObj.HardwareAddress + }) + errs = append(errs, fn(fldPath.Child("hardwareAddress"), &obj.HardwareAddress, oldVal, oldObj != nil)...) + } return errs } // Validate_OpaqueDeviceConfiguration validates an instance of OpaqueDeviceConfiguration according // to declarative validation rules in the API schema. -func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.OpaqueDeviceConfiguration) (errs field.ErrorList) { - // field resourcev1.OpaqueDeviceConfiguration.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_OpaqueDeviceConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.OpaqueDeviceConfiguration) (errs field.ErrorList) { + + { // field resourcev1.OpaqueDeviceConfiguration.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1627,10 +2418,20 @@ func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operat if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1.OpaqueDeviceConfiguration) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.OpaqueDeviceConfiguration) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } // field resourcev1.OpaqueDeviceConfiguration.Parameters has no validation return errs @@ -1638,16 +2439,23 @@ func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operat // Validate_ResourceClaim validates an instance of ResourceClaim according // to declarative validation rules in the API schema. -func Validate_ResourceClaim(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaim) (errs field.ErrorList) { +func Validate_ResourceClaim( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaim) (errs field.ErrorList) { + // field resourcev1.ResourceClaim.TypeMeta has no validation // field resourcev1.ResourceClaim.ObjectMeta has no validation - // field resourcev1.ResourceClaim.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceClaim.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1661,50 +2469,86 @@ func Validate_ResourceClaim(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_ResourceClaimSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaim) *resourcev1.ResourceClaimSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaim) *resourcev1.ResourceClaimSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } - // field resourcev1.ResourceClaim.Status - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceClaim.Status + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimStatus(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("status"), &obj.Status, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaim) *resourcev1.ResourceClaimStatus { return &oldObj.Status }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaim) *resourcev1.ResourceClaimStatus { + return &oldObj.Status + }) + errs = append(errs, fn(fldPath.Child("status"), &obj.Status, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimSpec validates an instance of ResourceClaimSpec according // to declarative validation rules in the API schema. -func Validate_ResourceClaimSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimSpec) (errs field.ErrorList) { - // field resourcev1.ResourceClaimSpec.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.DeviceClaim, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourceClaimSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimSpec) (errs field.ErrorList) { + + { // field resourcev1.ResourceClaimSpec.Devices + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.DeviceClaim, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceClaim(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("devices"), &obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaimSpec) *resourcev1.DeviceClaim { return &oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaimSpec) *resourcev1.DeviceClaim { + return &oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), &obj.Devices, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimStatus validates an instance of ResourceClaimStatus according // to declarative validation rules in the API schema. -func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimStatus) (errs field.ErrorList) { - // field resourcev1.ResourceClaimStatus.Allocation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.AllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourceClaimStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimStatus) (errs field.ErrorList) { + + { // field resourcev1.ResourceClaimStatus.Allocation + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.AllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1721,14 +2565,24 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f // call the type's validation function errs = append(errs, Validate_AllocationResult(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocation"), obj.Allocation, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaimStatus) *resourcev1.AllocationResult { return oldObj.Allocation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaimStatus) *resourcev1.AllocationResult { + return oldObj.Allocation + }) + errs = append(errs, fn(fldPath.Child("allocation"), obj.Allocation, oldVal, oldObj != nil)...) + } - // field resourcev1.ResourceClaimStatus.ReservedFor - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.ResourceClaimConsumerReference, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceClaimStatus.ReservedFor + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.ResourceClaimConsumerReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1743,20 +2597,31 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1.ResourceClaimConsumerReference, b resourcev1.ResourceClaimConsumerReference) bool { - return a.UID == b.UID - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.ResourceClaimConsumerReference, b resourcev1.ResourceClaimConsumerReference) bool { + return a.UID == b.UID + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("reservedFor"), obj.ReservedFor, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaimStatus) []resourcev1.ResourceClaimConsumerReference { - return oldObj.ReservedFor - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaimStatus) []resourcev1.ResourceClaimConsumerReference { + return oldObj.ReservedFor + }) + errs = append(errs, fn(fldPath.Child("reservedFor"), obj.ReservedFor, oldVal, oldObj != nil)...) + } - // field resourcev1.ResourceClaimStatus.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.AllocatedDeviceStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceClaimStatus.Devices + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.AllocatedDeviceStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1767,98 +2632,154 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1.AllocatedDeviceStatus, b resourcev1.AllocatedDeviceStatus) bool { - return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.AllocatedDeviceStatus, b resourcev1.AllocatedDeviceStatus) bool { + return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1.AllocatedDeviceStatus, b resourcev1.AllocatedDeviceStatus) bool { - return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) - }, validate.SemanticDeepEqual, Validate_AllocatedDeviceStatus)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.AllocatedDeviceStatus, b resourcev1.AllocatedDeviceStatus) bool { + return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) + }, validate.SemanticDeepEqual, Validate_AllocatedDeviceStatus); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("devices"), obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaimStatus) []resourcev1.AllocatedDeviceStatus { return oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaimStatus) []resourcev1.AllocatedDeviceStatus { + return oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), obj.Devices, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimTemplate validates an instance of ResourceClaimTemplate according // to declarative validation rules in the API schema. -func Validate_ResourceClaimTemplate(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimTemplate) (errs field.ErrorList) { +func Validate_ResourceClaimTemplate( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimTemplate) (errs field.ErrorList) { + // field resourcev1.ResourceClaimTemplate.TypeMeta has no validation // field resourcev1.ResourceClaimTemplate.ObjectMeta has no validation - // field resourcev1.ResourceClaimTemplate.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimTemplateSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceClaimTemplate.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimTemplateSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimTemplateSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaimTemplate) *resourcev1.ResourceClaimTemplateSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaimTemplate) *resourcev1.ResourceClaimTemplateSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimTemplateSpec validates an instance of ResourceClaimTemplateSpec according // to declarative validation rules in the API schema. -func Validate_ResourceClaimTemplateSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimTemplateSpec) (errs field.ErrorList) { +func Validate_ResourceClaimTemplateSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimTemplateSpec) (errs field.ErrorList) { + // field resourcev1.ResourceClaimTemplateSpec.ObjectMeta has no validation - // field resourcev1.ResourceClaimTemplateSpec.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.ResourceClaimSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceClaimTemplateSpec.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.ResourceClaimSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1.ResourceClaimTemplateSpec) *resourcev1.ResourceClaimSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceClaimTemplateSpec) *resourcev1.ResourceClaimSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceSlice validates an instance of ResourceSlice according // to declarative validation rules in the API schema. -func Validate_ResourceSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ResourceSlice) (errs field.ErrorList) { +func Validate_ResourceSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ResourceSlice) (errs field.ErrorList) { + // field resourcev1.ResourceSlice.TypeMeta has no validation // field resourcev1.ResourceSlice.ObjectMeta has no validation - // field resourcev1.ResourceSlice.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1.ResourceSliceSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceSlice.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1.ResourceSliceSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceSliceSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1.ResourceSlice) *resourcev1.ResourceSliceSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceSlice) *resourcev1.ResourceSliceSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceSliceSpec validates an instance of ResourceSliceSpec according // to declarative validation rules in the API schema. -func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1.ResourceSliceSpec) (errs field.ErrorList) { +func Validate_ResourceSliceSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1.ResourceSliceSpec) (errs field.ErrorList) { + // field resourcev1.ResourceSliceSpec.Driver has no validation // field resourcev1.ResourceSliceSpec.Pool has no validation // field resourcev1.ResourceSliceSpec.NodeName has no validation // field resourcev1.ResourceSliceSpec.NodeSelector has no validation // field resourcev1.ResourceSliceSpec.AllNodes has no validation - // field resourcev1.ResourceSliceSpec.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.Device, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceSliceSpec.Devices + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.Device, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1869,18 +2790,30 @@ func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Device)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Device); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("devices"), obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1.ResourceSliceSpec) []resourcev1.Device { return oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceSliceSpec) []resourcev1.Device { + return oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), obj.Devices, oldVal, oldObj != nil)...) + } // field resourcev1.ResourceSliceSpec.PerDeviceNodeSelection has no validation - // field resourcev1.ResourceSliceSpec.SharedCounters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1.CounterSet, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1.ResourceSliceSpec.SharedCounters + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1.CounterSet, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1895,11 +2828,23 @@ func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1.CounterSet, b resourcev1.CounterSet) bool { return a.Name == b.Name }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.CounterSet, b resourcev1.CounterSet) bool { return a.Name == b.Name }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1.CounterSet, b resourcev1.CounterSet) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_CounterSet)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1.CounterSet, b resourcev1.CounterSet) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_CounterSet); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sharedCounters"), obj.SharedCounters, safe.Field(oldObj, func(oldObj *resourcev1.ResourceSliceSpec) []resourcev1.CounterSet { return oldObj.SharedCounters }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1.ResourceSliceSpec) []resourcev1.CounterSet { + return oldObj.SharedCounters + }) + errs = append(errs, fn(fldPath.Child("sharedCounters"), obj.SharedCounters, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/resource/v1alpha3/zz_generated.validations.go b/pkg/apis/resource/v1alpha3/zz_generated.validations.go index e2ab02720ac..302f1098bc1 100644 --- a/pkg/apis/resource/v1alpha3/zz_generated.validations.go +++ b/pkg/apis/resource/v1alpha3/zz_generated.validations.go @@ -42,36 +42,57 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type DeviceTaintRule - scheme.AddValidationFunc((*resourcev1alpha3.DeviceTaintRule)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_DeviceTaintRule(ctx, op, nil /* fldPath */, obj.(*resourcev1alpha3.DeviceTaintRule), safe.Cast[*resourcev1alpha3.DeviceTaintRule](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1alpha3.DeviceTaintRule)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_DeviceTaintRule( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1alpha3.DeviceTaintRule), + safe.Cast[*resourcev1alpha3.DeviceTaintRule](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourcePoolStatusRequest - scheme.AddValidationFunc((*resourcev1alpha3.ResourcePoolStatusRequest)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_ResourcePoolStatusRequest(ctx, op, nil /* fldPath */, obj.(*resourcev1alpha3.ResourcePoolStatusRequest), safe.Cast[*resourcev1alpha3.ResourcePoolStatusRequest](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1alpha3.ResourcePoolStatusRequest)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_ResourcePoolStatusRequest( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1alpha3.ResourcePoolStatusRequest), + safe.Cast[*resourcev1alpha3.ResourcePoolStatusRequest](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_DeviceTaint validates an instance of DeviceTaint according // to declarative validation rules in the API schema. -func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.DeviceTaint) (errs field.ErrorList) { +func Validate_DeviceTaint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.DeviceTaint) (errs field.ErrorList) { + // field resourcev1alpha3.DeviceTaint.Key has no validation // field resourcev1alpha3.DeviceTaint.Value has no validation - // field resourcev1alpha3.DeviceTaint.Effect - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1alpha3.DeviceTaintEffect, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.DeviceTaint.Effect + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1alpha3.DeviceTaintEffect, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -85,7 +106,13 @@ func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath * // call the type's validation function errs = append(errs, Validate_DeviceTaintEffect(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("effect"), &obj.Effect, safe.Field(oldObj, func(oldObj *resourcev1alpha3.DeviceTaint) *resourcev1alpha3.DeviceTaintEffect { return &oldObj.Effect }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.DeviceTaint) *resourcev1alpha3.DeviceTaintEffect { + return &oldObj.Effect + }) + errs = append(errs, fn(fldPath.Child("effect"), &obj.Effect, oldVal, oldObj != nil)...) + } // field resourcev1alpha3.DeviceTaint.TimeAdded has no validation return errs @@ -95,31 +122,47 @@ var symbolsForDeviceTaintEffect = sets.New(resourcev1alpha3.DeviceTaintEffectNoE // Validate_DeviceTaintEffect validates an instance of DeviceTaintEffect according // to declarative validation rules in the API schema. -func Validate_DeviceTaintEffect(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.DeviceTaintEffect) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil)...) +func Validate_DeviceTaintEffect( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.DeviceTaintEffect) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DeviceTaintRule validates an instance of DeviceTaintRule according // to declarative validation rules in the API schema. -func Validate_DeviceTaintRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.DeviceTaintRule) (errs field.ErrorList) { +func Validate_DeviceTaintRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.DeviceTaintRule) (errs field.ErrorList) { + // field resourcev1alpha3.DeviceTaintRule.TypeMeta has no validation // field resourcev1alpha3.DeviceTaintRule.ObjectMeta has no validation - // field resourcev1alpha3.DeviceTaintRule.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1alpha3.DeviceTaintRuleSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.DeviceTaintRule.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1alpha3.DeviceTaintRuleSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceTaintRuleSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1alpha3.DeviceTaintRule) *resourcev1alpha3.DeviceTaintRuleSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.DeviceTaintRule) *resourcev1alpha3.DeviceTaintRuleSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field resourcev1alpha3.DeviceTaintRule.Status has no validation return errs @@ -127,33 +170,53 @@ func Validate_DeviceTaintRule(ctx context.Context, op operation.Operation, fldPa // Validate_DeviceTaintRuleSpec validates an instance of DeviceTaintRuleSpec according // to declarative validation rules in the API schema. -func Validate_DeviceTaintRuleSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.DeviceTaintRuleSpec) (errs field.ErrorList) { +func Validate_DeviceTaintRuleSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.DeviceTaintRuleSpec) (errs field.ErrorList) { + // field resourcev1alpha3.DeviceTaintRuleSpec.DeviceSelector has no validation - // field resourcev1alpha3.DeviceTaintRuleSpec.Taint - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1alpha3.DeviceTaint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.DeviceTaintRuleSpec.Taint + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1alpha3.DeviceTaint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceTaint(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("taint"), &obj.Taint, safe.Field(oldObj, func(oldObj *resourcev1alpha3.DeviceTaintRuleSpec) *resourcev1alpha3.DeviceTaint { return &oldObj.Taint }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.DeviceTaintRuleSpec) *resourcev1alpha3.DeviceTaint { + return &oldObj.Taint + }) + errs = append(errs, fn(fldPath.Child("taint"), &obj.Taint, oldVal, oldObj != nil)...) + } return errs } // Validate_PoolStatus validates an instance of PoolStatus according // to declarative validation rules in the API schema. -func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.PoolStatus) (errs field.ErrorList) { - // field resourcev1alpha3.PoolStatus.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_PoolStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.PoolStatus) (errs field.ErrorList) { + + { // field resourcev1alpha3.PoolStatus.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -164,16 +227,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.PoolName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.PoolName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -184,16 +259,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("poolName"), &obj.PoolName, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *string { return &oldObj.PoolName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *string { + return &oldObj.PoolName + }) + errs = append(errs, fn(fldPath.Child("poolName"), &obj.PoolName, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.Generation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.Generation + fn := func( + fldPath *field.Path, + obj, oldObj *int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -204,16 +291,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("generation"), &obj.Generation, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *int64 { return &oldObj.Generation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *int64 { + return &oldObj.Generation + }) + errs = append(errs, fn(fldPath.Child("generation"), &obj.Generation, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.ResourceSliceCount - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.ResourceSliceCount + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -223,16 +322,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourceSliceCount"), obj.ResourceSliceCount, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *int32 { return oldObj.ResourceSliceCount }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *int32 { + return oldObj.ResourceSliceCount + }) + errs = append(errs, fn(fldPath.Child("resourceSliceCount"), obj.ResourceSliceCount, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.TotalDevices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.TotalDevices + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -242,16 +353,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("totalDevices"), obj.TotalDevices, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *int32 { return oldObj.TotalDevices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *int32 { + return oldObj.TotalDevices + }) + errs = append(errs, fn(fldPath.Child("totalDevices"), obj.TotalDevices, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.AllocatedDevices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.AllocatedDevices + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -261,16 +384,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("allocatedDevices"), obj.AllocatedDevices, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *int32 { return oldObj.AllocatedDevices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *int32 { + return oldObj.AllocatedDevices + }) + errs = append(errs, fn(fldPath.Child("allocatedDevices"), obj.AllocatedDevices, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.AvailableDevices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.AvailableDevices + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -280,16 +415,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("availableDevices"), obj.AvailableDevices, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *int32 { return oldObj.AvailableDevices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *int32 { + return oldObj.AvailableDevices + }) + errs = append(errs, fn(fldPath.Child("availableDevices"), obj.AvailableDevices, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.UnavailableDevices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.UnavailableDevices + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -299,16 +446,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("unavailableDevices"), obj.UnavailableDevices, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *int32 { return oldObj.UnavailableDevices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *int32 { + return oldObj.UnavailableDevices + }) + errs = append(errs, fn(fldPath.Child("unavailableDevices"), obj.UnavailableDevices, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.NodeName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.NodeName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -318,16 +477,28 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("nodeName"), obj.NodeName, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *string { return oldObj.NodeName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *string { + return oldObj.NodeName + }) + errs = append(errs, fn(fldPath.Child("nodeName"), obj.NodeName, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.PoolStatus.ValidationError - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.PoolStatus.ValidationError + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -337,25 +508,40 @@ func Validate_PoolStatus(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("validationError"), obj.ValidationError, safe.Field(oldObj, func(oldObj *resourcev1alpha3.PoolStatus) *string { return oldObj.ValidationError }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.PoolStatus) *string { + return oldObj.ValidationError + }) + errs = append(errs, fn(fldPath.Child("validationError"), obj.ValidationError, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourcePoolStatusRequest validates an instance of ResourcePoolStatusRequest according // to declarative validation rules in the API schema. -func Validate_ResourcePoolStatusRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequest) (errs field.ErrorList) { +func Validate_ResourcePoolStatusRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequest) (errs field.ErrorList) { + // field resourcev1alpha3.ResourcePoolStatusRequest.TypeMeta has no validation // field resourcev1alpha3.ResourcePoolStatusRequest.ObjectMeta has no validation - // field resourcev1alpha3.ResourcePoolStatusRequest.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.ResourcePoolStatusRequest.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -369,16 +555,24 @@ func Validate_ResourcePoolStatusRequest(ctx context.Context, op operation.Operat // call the type's validation function errs = append(errs, Validate_ResourcePoolStatusRequestSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequest) *resourcev1alpha3.ResourcePoolStatusRequestSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequest) *resourcev1alpha3.ResourcePoolStatusRequestSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.ResourcePoolStatusRequest.Status - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.ResourcePoolStatusRequest.Status + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -391,22 +585,33 @@ func Validate_ResourcePoolStatusRequest(ctx context.Context, op operation.Operat // call the type's validation function errs = append(errs, Validate_ResourcePoolStatusRequestStatus(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("status"), obj.Status, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequest) *resourcev1alpha3.ResourcePoolStatusRequestStatus { - return oldObj.Status - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequest) *resourcev1alpha3.ResourcePoolStatusRequestStatus { + return oldObj.Status + }) + errs = append(errs, fn(fldPath.Child("status"), obj.Status, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourcePoolStatusRequestSpec validates an instance of ResourcePoolStatusRequestSpec according // to declarative validation rules in the API schema. -func Validate_ResourcePoolStatusRequestSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) (errs field.ErrorList) { - // field resourcev1alpha3.ResourcePoolStatusRequestSpec.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourcePoolStatusRequestSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) (errs field.ErrorList) { + + { // field resourcev1alpha3.ResourcePoolStatusRequestSpec.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -417,16 +622,28 @@ func Validate_ResourcePoolStatusRequestSpec(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.ResourcePoolStatusRequestSpec.PoolName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.ResourcePoolStatusRequestSpec.PoolName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -436,16 +653,28 @@ func Validate_ResourcePoolStatusRequestSpec(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("poolName"), obj.PoolName, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) *string { return oldObj.PoolName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) *string { + return oldObj.PoolName + }) + errs = append(errs, fn(fldPath.Child("poolName"), obj.PoolName, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.ResourcePoolStatusRequestSpec.Limit - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.ResourcePoolStatusRequestSpec.Limit + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -457,23 +686,40 @@ func Validate_ResourcePoolStatusRequestSpec(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1000)...) - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1000); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("limit"), obj.Limit, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) *int32 { return oldObj.Limit }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestSpec) *int32 { + return oldObj.Limit + }) + errs = append(errs, fn(fldPath.Child("limit"), obj.Limit, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourcePoolStatusRequestStatus validates an instance of ResourcePoolStatusRequestStatus according // to declarative validation rules in the API schema. -func Validate_ResourcePoolStatusRequestStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) (errs field.ErrorList) { - // field resourcev1alpha3.ResourcePoolStatusRequestStatus.PoolCount - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourcePoolStatusRequestStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) (errs field.ErrorList) { + + { // field resourcev1alpha3.ResourcePoolStatusRequestStatus.PoolCount + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -484,16 +730,28 @@ func Validate_ResourcePoolStatusRequestStatus(ctx context.Context, op operation. if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("poolCount"), obj.PoolCount, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) *int32 { return oldObj.PoolCount }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) *int32 { + return oldObj.PoolCount + }) + errs = append(errs, fn(fldPath.Child("poolCount"), obj.PoolCount, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.ResourcePoolStatusRequestStatus.Pools - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1alpha3.PoolStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.ResourcePoolStatusRequestStatus.Pools + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1alpha3.PoolStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -508,18 +766,28 @@ func Validate_ResourcePoolStatusRequestStatus(ctx context.Context, op operation. return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PoolStatus)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_PoolStatus); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pools"), obj.Pools, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) []resourcev1alpha3.PoolStatus { - return oldObj.Pools - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) []resourcev1alpha3.PoolStatus { + return oldObj.Pools + }) + errs = append(errs, fn(fldPath.Child("pools"), obj.Pools, oldVal, oldObj != nil)...) + } - // field resourcev1alpha3.ResourcePoolStatusRequestStatus.Conditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []v1.Condition, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1alpha3.ResourcePoolStatusRequestStatus.Conditions + fn := func( + fldPath *field.Path, + obj, oldObj []v1.Condition, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -534,11 +802,18 @@ func Validate_ResourcePoolStatusRequestStatus(ctx context.Context, op operation. return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a v1.Condition, b v1.Condition) bool { return a.Type == b.Type })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a v1.Condition, b v1.Condition) bool { return a.Type == b.Type }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("conditions"), obj.Conditions, safe.Field(oldObj, func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) []v1.Condition { - return oldObj.Conditions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1alpha3.ResourcePoolStatusRequestStatus) []v1.Condition { + return oldObj.Conditions + }) + errs = append(errs, fn(fldPath.Child("conditions"), obj.Conditions, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/resource/v1beta1/zz_generated.validations.go b/pkg/apis/resource/v1beta1/zz_generated.validations.go index 56f0ebb9de0..1c82b735415 100644 --- a/pkg/apis/resource/v1beta1/zz_generated.validations.go +++ b/pkg/apis/resource/v1beta1/zz_generated.validations.go @@ -43,53 +43,88 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type DeviceClass - scheme.AddValidationFunc((*resourcev1beta1.DeviceClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_DeviceClass(ctx, op, nil /* fldPath */, obj.(*resourcev1beta1.DeviceClass), safe.Cast[*resourcev1beta1.DeviceClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta1.DeviceClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_DeviceClass( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta1.DeviceClass), + safe.Cast[*resourcev1beta1.DeviceClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceClaim - scheme.AddValidationFunc((*resourcev1beta1.ResourceClaim)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_ResourceClaim(ctx, op, nil /* fldPath */, obj.(*resourcev1beta1.ResourceClaim), safe.Cast[*resourcev1beta1.ResourceClaim](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta1.ResourceClaim)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_ResourceClaim( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta1.ResourceClaim), + safe.Cast[*resourcev1beta1.ResourceClaim](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceClaimTemplate - scheme.AddValidationFunc((*resourcev1beta1.ResourceClaimTemplate)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ResourceClaimTemplate(ctx, op, nil /* fldPath */, obj.(*resourcev1beta1.ResourceClaimTemplate), safe.Cast[*resourcev1beta1.ResourceClaimTemplate](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta1.ResourceClaimTemplate)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ResourceClaimTemplate( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta1.ResourceClaimTemplate), + safe.Cast[*resourcev1beta1.ResourceClaimTemplate](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceSlice - scheme.AddValidationFunc((*resourcev1beta1.ResourceSlice)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ResourceSlice(ctx, op, nil /* fldPath */, obj.(*resourcev1beta1.ResourceSlice), safe.Cast[*resourcev1beta1.ResourceSlice](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta1.ResourceSlice)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ResourceSlice( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta1.ResourceSlice), + safe.Cast[*resourcev1beta1.ResourceSlice](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_AllocatedDeviceStatus validates an instance of AllocatedDeviceStatus according // to declarative validation rules in the API schema. -func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.AllocatedDeviceStatus) (errs field.ErrorList) { +func Validate_AllocatedDeviceStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.AllocatedDeviceStatus) (errs field.ErrorList) { + // field resourcev1beta1.AllocatedDeviceStatus.Driver has no validation // field resourcev1beta1.AllocatedDeviceStatus.Pool has no validation // field resourcev1beta1.AllocatedDeviceStatus.Device has no validation - // field resourcev1beta1.AllocatedDeviceStatus.ShareID - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.AllocatedDeviceStatus.ShareID + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -99,19 +134,31 @@ func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shareID"), obj.ShareID, safe.Field(oldObj, func(oldObj *resourcev1beta1.AllocatedDeviceStatus) *string { return oldObj.ShareID }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.AllocatedDeviceStatus) *string { + return oldObj.ShareID + }) + errs = append(errs, fn(fldPath.Child("shareID"), obj.ShareID, oldVal, oldObj != nil)...) + } // field resourcev1beta1.AllocatedDeviceStatus.Conditions has no validation // field resourcev1beta1.AllocatedDeviceStatus.Data has no validation - // field resourcev1beta1.AllocatedDeviceStatus.NetworkData - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.NetworkDeviceData, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.AllocatedDeviceStatus.NetworkData + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.NetworkDeviceData, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -124,9 +171,13 @@ func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, // call the type's validation function errs = append(errs, Validate_NetworkDeviceData(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("networkData"), obj.NetworkData, safe.Field(oldObj, func(oldObj *resourcev1beta1.AllocatedDeviceStatus) *resourcev1beta1.NetworkDeviceData { - return oldObj.NetworkData - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.AllocatedDeviceStatus) *resourcev1beta1.NetworkDeviceData { + return oldObj.NetworkData + }) + errs = append(errs, fn(fldPath.Child("networkData"), obj.NetworkData, oldVal, oldObj != nil)...) + } return errs } @@ -135,28 +186,44 @@ var symbolsForAllocationConfigSource = sets.New(resourcev1beta1.AllocationConfig // Validate_AllocationConfigSource validates an instance of AllocationConfigSource according // to declarative validation rules in the API schema. -func Validate_AllocationConfigSource(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.AllocationConfigSource) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAllocationConfigSource, nil).MarkAlpha()...) +func Validate_AllocationConfigSource( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.AllocationConfigSource) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAllocationConfigSource, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_AllocationResult validates an instance of AllocationResult according // to declarative validation rules in the API schema. -func Validate_AllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.AllocationResult) (errs field.ErrorList) { - // field resourcev1beta1.AllocationResult.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceAllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_AllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.AllocationResult) (errs field.ErrorList) { + + { // field resourcev1beta1.AllocationResult.Devices + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceAllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceAllocationResult(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("devices"), &obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta1.AllocationResult) *resourcev1beta1.DeviceAllocationResult { - return &oldObj.Devices - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.AllocationResult) *resourcev1beta1.DeviceAllocationResult { + return &oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), &obj.Devices, oldVal, oldObj != nil)...) + } // field resourcev1beta1.AllocationResult.NodeSelector has no validation // field resourcev1beta1.AllocationResult.AllocationTimestamp has no validation @@ -165,13 +232,20 @@ func Validate_AllocationResult(ctx context.Context, op operation.Operation, fldP // Validate_BasicDevice validates an instance of BasicDevice according // to declarative validation rules in the API schema. -func Validate_BasicDevice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.BasicDevice) (errs field.ErrorList) { - // field resourcev1beta1.BasicDevice.Attributes - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[resourcev1beta1.QualifiedName]resourcev1beta1.DeviceAttribute, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_BasicDevice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.BasicDevice) (errs field.ErrorList) { + + { // field resourcev1beta1.BasicDevice.Attributes + fn := func( + fldPath *field.Path, + obj, oldObj map[resourcev1beta1.QualifiedName]resourcev1beta1.DeviceAttribute, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -182,20 +256,30 @@ func Validate_BasicDevice(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_DeviceAttribute)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_DeviceAttribute); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("attributes"), obj.Attributes, safe.Field(oldObj, func(oldObj *resourcev1beta1.BasicDevice) map[resourcev1beta1.QualifiedName]resourcev1beta1.DeviceAttribute { - return oldObj.Attributes - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.BasicDevice) map[resourcev1beta1.QualifiedName]resourcev1beta1.DeviceAttribute { + return oldObj.Attributes + }) + errs = append(errs, fn(fldPath.Child("attributes"), obj.Attributes, oldVal, oldObj != nil)...) + } // field resourcev1beta1.BasicDevice.Capacity has no validation - // field resourcev1beta1.BasicDevice.ConsumesCounters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceCounterConsumption, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.BasicDevice.ConsumesCounters + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceCounterConsumption, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -210,28 +294,42 @@ func Validate_BasicDevice(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.DeviceCounterConsumption, b resourcev1beta1.DeviceCounterConsumption) bool { - return a.CounterSet == b.CounterSet - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.DeviceCounterConsumption, b resourcev1beta1.DeviceCounterConsumption) bool { + return a.CounterSet == b.CounterSet + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.DeviceCounterConsumption, b resourcev1beta1.DeviceCounterConsumption) bool { - return a.CounterSet == b.CounterSet - }, validate.SemanticDeepEqual, Validate_DeviceCounterConsumption)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.DeviceCounterConsumption, b resourcev1beta1.DeviceCounterConsumption) bool { + return a.CounterSet == b.CounterSet + }, validate.SemanticDeepEqual, Validate_DeviceCounterConsumption); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("consumesCounters"), obj.ConsumesCounters, safe.Field(oldObj, func(oldObj *resourcev1beta1.BasicDevice) []resourcev1beta1.DeviceCounterConsumption { - return oldObj.ConsumesCounters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.BasicDevice) []resourcev1beta1.DeviceCounterConsumption { + return oldObj.ConsumesCounters + }) + errs = append(errs, fn(fldPath.Child("consumesCounters"), obj.ConsumesCounters, oldVal, oldObj != nil)...) + } // field resourcev1beta1.BasicDevice.NodeName has no validation // field resourcev1beta1.BasicDevice.NodeSelector has no validation // field resourcev1beta1.BasicDevice.AllNodes has no validation - // field resourcev1beta1.BasicDevice.Taints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceTaint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.BasicDevice.Taints + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceTaint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -242,18 +340,30 @@ func Validate_BasicDevice(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceTaint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceTaint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("taints"), obj.Taints, safe.Field(oldObj, func(oldObj *resourcev1beta1.BasicDevice) []resourcev1beta1.DeviceTaint { return oldObj.Taints }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.BasicDevice) []resourcev1beta1.DeviceTaint { + return oldObj.Taints + }) + errs = append(errs, fn(fldPath.Child("taints"), obj.Taints, oldVal, oldObj != nil)...) + } // field resourcev1beta1.BasicDevice.BindsToNode has no validation - // field resourcev1beta1.BasicDevice.BindingConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.BasicDevice.BindingConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -268,14 +378,24 @@ func Validate_BasicDevice(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } return - }(fldPath.Child("bindingConditions"), obj.BindingConditions, safe.Field(oldObj, func(oldObj *resourcev1beta1.BasicDevice) []string { return oldObj.BindingConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.BasicDevice) []string { + return oldObj.BindingConditions + }) + errs = append(errs, fn(fldPath.Child("bindingConditions"), obj.BindingConditions, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.BasicDevice.BindingFailureConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.BasicDevice.BindingFailureConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -290,7 +410,13 @@ func Validate_BasicDevice(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } return - }(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, safe.Field(oldObj, func(oldObj *resourcev1beta1.BasicDevice) []string { return oldObj.BindingFailureConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.BasicDevice) []string { + return oldObj.BindingFailureConditions + }) + errs = append(errs, fn(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, oldVal, oldObj != nil)...) + } // field resourcev1beta1.BasicDevice.AllowMultipleAllocations has no validation // field resourcev1beta1.BasicDevice.NodeAllocatableResourceMappings has no validation @@ -299,13 +425,20 @@ func Validate_BasicDevice(ctx context.Context, op operation.Operation, fldPath * // Validate_CounterSet validates an instance of CounterSet according // to declarative validation rules in the API schema. -func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.CounterSet) (errs field.ErrorList) { - // field resourcev1beta1.CounterSet.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_CounterSet( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.CounterSet) (errs field.ErrorList) { + + { // field resourcev1beta1.CounterSet.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -316,16 +449,28 @@ func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *resourcev1beta1.CounterSet) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.CounterSet) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.CounterSet.Counters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]resourcev1beta1.Counter, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.CounterSet.Counters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]resourcev1beta1.Counter, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -336,24 +481,39 @@ func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counters"), obj.Counters, safe.Field(oldObj, func(oldObj *resourcev1beta1.CounterSet) map[string]resourcev1beta1.Counter { return oldObj.Counters }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.CounterSet) map[string]resourcev1beta1.Counter { + return oldObj.Counters + }) + errs = append(errs, fn(fldPath.Child("counters"), obj.Counters, oldVal, oldObj != nil)...) + } return errs } // Validate_Device validates an instance of Device according // to declarative validation rules in the API schema. -func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.Device) (errs field.ErrorList) { +func Validate_Device( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.Device) (errs field.ErrorList) { + // field resourcev1beta1.Device.Name has no validation - // field resourcev1beta1.Device.Basic - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.BasicDevice, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.Device.Basic + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.BasicDevice, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -366,20 +526,33 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field // call the type's validation function errs = append(errs, Validate_BasicDevice(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("basic"), obj.Basic, safe.Field(oldObj, func(oldObj *resourcev1beta1.Device) *resourcev1beta1.BasicDevice { return oldObj.Basic }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.Device) *resourcev1beta1.BasicDevice { + return oldObj.Basic + }) + errs = append(errs, fn(fldPath.Child("basic"), obj.Basic, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceAllocationConfiguration validates an instance of DeviceAllocationConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceAllocationConfiguration) (errs field.ErrorList) { - // field resourcev1beta1.DeviceAllocationConfiguration.Source - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.AllocationConfigSource, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceAllocationConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceAllocationConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceAllocationConfiguration.Source + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.AllocationConfigSource, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -393,16 +566,24 @@ func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Op // call the type's validation function errs = append(errs, Validate_AllocationConfigSource(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("source"), &obj.Source, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAllocationConfiguration) *resourcev1beta1.AllocationConfigSource { - return &oldObj.Source - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAllocationConfiguration) *resourcev1beta1.AllocationConfigSource { + return &oldObj.Source + }) + errs = append(errs, fn(fldPath.Child("source"), &obj.Source, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAllocationConfiguration.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAllocationConfiguration.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -417,23 +598,39 @@ func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Op return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAllocationConfiguration) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAllocationConfiguration) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAllocationConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAllocationConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta1.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAllocationConfiguration) *resourcev1beta1.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAllocationConfiguration) *resourcev1beta1.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta1.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } @@ -442,21 +639,33 @@ var symbolsForDeviceAllocationMode = sets.New(resourcev1beta1.DeviceAllocationMo // Validate_DeviceAllocationMode validates an instance of DeviceAllocationMode according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationMode(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceAllocationMode) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceAllocationMode, nil).MarkAlpha()...) +func Validate_DeviceAllocationMode( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceAllocationMode) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceAllocationMode, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DeviceAllocationResult validates an instance of DeviceAllocationResult according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceAllocationResult) (errs field.ErrorList) { - // field resourcev1beta1.DeviceAllocationResult.Results - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceRequestAllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceAllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceAllocationResult) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceAllocationResult.Results + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceRequestAllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -471,18 +680,28 @@ func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceRequestAllocationResult)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceRequestAllocationResult); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("results"), obj.Results, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAllocationResult) []resourcev1beta1.DeviceRequestAllocationResult { - return oldObj.Results - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAllocationResult) []resourcev1beta1.DeviceRequestAllocationResult { + return oldObj.Results + }) + errs = append(errs, fn(fldPath.Child("results"), obj.Results, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAllocationResult.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceAllocationConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAllocationResult.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceAllocationConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -497,11 +716,17 @@ func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceAllocationConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceAllocationConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAllocationResult) []resourcev1beta1.DeviceAllocationConfiguration { - return oldObj.Config - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAllocationResult) []resourcev1beta1.DeviceAllocationConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } return errs } @@ -510,55 +735,72 @@ var unionMembershipFor_k8s_io_api_resource_v1beta1_DeviceAttribute_ = validate.N // Validate_DeviceAttribute validates an instance of DeviceAttribute according // to declarative validation rules in the API schema. -func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceAttribute) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_resource_v1beta1_DeviceAttribute_, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.IntValue != nil - }, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.BoolValue != nil - }, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.StringValue != nil - }, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.VersionValue != nil - }, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.IntValues) != 0 - }, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.BoolValues) != 0 - }, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.StringValues) != 0 - }, func(obj *resourcev1beta1.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.VersionValues) != 0 - }).MarkAlpha()...) +func Validate_DeviceAttribute( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceAttribute) (errs field.ErrorList) { - // field resourcev1beta1.DeviceAttribute.IntValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int64, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_resource_v1beta1_DeviceAttribute_, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.IntValue != nil + }, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.BoolValue != nil + }, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.StringValue != nil + }, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.VersionValue != nil + }, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.IntValues) != 0 + }, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.BoolValues) != 0 + }, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.StringValues) != 0 + }, + func(obj *resourcev1beta1.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.VersionValues) != 0 + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + + { // field resourcev1beta1.DeviceAttribute.IntValue + fn := func( + fldPath *field.Path, + obj, oldObj *int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -569,14 +811,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("int"), obj.IntValue, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) *int64 { return oldObj.IntValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) *int64 { + return oldObj.IntValue + }) + errs = append(errs, fn(fldPath.Child("int"), obj.IntValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAttribute.BoolValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAttribute.BoolValue + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -587,14 +839,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("bool"), obj.BoolValue, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) *bool { return oldObj.BoolValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) *bool { + return oldObj.BoolValue + }) + errs = append(errs, fn(fldPath.Child("bool"), obj.BoolValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAttribute.StringValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAttribute.StringValue + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -605,14 +867,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("string"), obj.StringValue, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) *string { return oldObj.StringValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) *string { + return oldObj.StringValue + }) + errs = append(errs, fn(fldPath.Child("string"), obj.StringValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAttribute.VersionValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAttribute.VersionValue + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -623,14 +895,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("version"), obj.VersionValue, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) *string { return oldObj.VersionValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) *string { + return oldObj.VersionValue + }) + errs = append(errs, fn(fldPath.Child("version"), obj.VersionValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAttribute.IntValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAttribute.IntValues + fn := func( + fldPath *field.Path, + obj, oldObj []int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -641,14 +923,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("ints"), obj.IntValues, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) []int64 { return oldObj.IntValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) []int64 { + return oldObj.IntValues + }) + errs = append(errs, fn(fldPath.Child("ints"), obj.IntValues, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAttribute.BoolValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAttribute.BoolValues + fn := func( + fldPath *field.Path, + obj, oldObj []bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -659,14 +951,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("bools"), obj.BoolValues, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) []bool { return oldObj.BoolValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) []bool { + return oldObj.BoolValues + }) + errs = append(errs, fn(fldPath.Child("bools"), obj.BoolValues, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAttribute.StringValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAttribute.StringValues + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -677,14 +979,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("strings"), obj.StringValues, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) []string { return oldObj.StringValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) []string { + return oldObj.StringValues + }) + errs = append(errs, fn(fldPath.Child("strings"), obj.StringValues, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceAttribute.VersionValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceAttribute.VersionValues + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -695,20 +1007,33 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("versions"), obj.VersionValues, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceAttribute) []string { return oldObj.VersionValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceAttribute) []string { + return oldObj.VersionValues + }) + errs = append(errs, fn(fldPath.Child("versions"), obj.VersionValues, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClaim validates an instance of DeviceClaim according // to declarative validation rules in the API schema. -func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceClaim) (errs field.ErrorList) { - // field resourcev1beta1.DeviceClaim.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceRequest, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClaim( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceClaim) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceClaim.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -723,18 +1048,34 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.DeviceRequest, b resourcev1beta1.DeviceRequest) bool { return a.Name == b.Name }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.DeviceRequest, b resourcev1beta1.DeviceRequest) bool { return a.Name == b.Name }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.DeviceRequest, b resourcev1beta1.DeviceRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceRequest)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.DeviceRequest, b resourcev1beta1.DeviceRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceRequest); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClaim) []resourcev1beta1.DeviceRequest { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClaim) []resourcev1beta1.DeviceRequest { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceClaim.Constraints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceConstraint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceClaim.Constraints + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceConstraint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -749,18 +1090,28 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceConstraint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceConstraint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("constraints"), obj.Constraints, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClaim) []resourcev1beta1.DeviceConstraint { - return oldObj.Constraints - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClaim) []resourcev1beta1.DeviceConstraint { + return oldObj.Constraints + }) + errs = append(errs, fn(fldPath.Child("constraints"), obj.Constraints, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceClaim.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceClaimConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceClaim.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceClaimConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -775,24 +1126,37 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClaimConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClaimConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClaim) []resourcev1beta1.DeviceClaimConfiguration { - return oldObj.Config - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClaim) []resourcev1beta1.DeviceClaimConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClaimConfiguration validates an instance of DeviceClaimConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceClaimConfiguration) (errs field.ErrorList) { - // field resourcev1beta1.DeviceClaimConfiguration.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClaimConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceClaimConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceClaimConfiguration.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -807,97 +1171,158 @@ func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operati return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClaimConfiguration) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClaimConfiguration) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceClaimConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceClaimConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta1.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClaimConfiguration) *resourcev1beta1.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClaimConfiguration) *resourcev1beta1.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta1.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClass validates an instance of DeviceClass according // to declarative validation rules in the API schema. -func Validate_DeviceClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceClass) (errs field.ErrorList) { +func Validate_DeviceClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceClass) (errs field.ErrorList) { + // field resourcev1beta1.DeviceClass.TypeMeta has no validation - // field resourcev1beta1.DeviceClass.ObjectMeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *v1.ObjectMeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceClass.ObjectMeta + fn := func( + fldPath *field.Path, + obj, oldObj *v1.ObjectMeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort name + func() { // cohort = "name" earlyReturn := false - if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { earlyReturn = true } if earlyReturn { return // do not proceed } - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha()...) + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("metadata"), &obj.ObjectMeta, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClass) *v1.ObjectMeta { return &oldObj.ObjectMeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClass) *v1.ObjectMeta { + return &oldObj.ObjectMeta + }) + errs = append(errs, fn(fldPath.Child("metadata"), &obj.ObjectMeta, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceClass.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceClassSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceClass.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceClassSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceClassSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClass) *resourcev1beta1.DeviceClassSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClass) *resourcev1beta1.DeviceClassSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClassConfiguration validates an instance of DeviceClassConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceClassConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceClassConfiguration) (errs field.ErrorList) { - // field resourcev1beta1.DeviceClassConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClassConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceClassConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceClassConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta1.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClassConfiguration) *resourcev1beta1.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClassConfiguration) *resourcev1beta1.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta1.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClassSpec validates an instance of DeviceClassSpec according // to declarative validation rules in the API schema. -func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceClassSpec) (errs field.ErrorList) { - // field resourcev1beta1.DeviceClassSpec.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClassSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceClassSpec) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceClassSpec.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -912,16 +1337,24 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClassSpec) []resourcev1beta1.DeviceSelector { - return oldObj.Selectors - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClassSpec) []resourcev1beta1.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceClassSpec.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceClassConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceClassSpec.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceClassConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -936,18 +1369,28 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClassConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClassConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClassSpec) []resourcev1beta1.DeviceClassConfiguration { - return oldObj.Config - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClassSpec) []resourcev1beta1.DeviceClassConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceClassSpec.ExtendedResourceName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceClassSpec.ExtendedResourceName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -957,22 +1400,37 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa if earlyReturn { return // do not proceed } - errs = append(errs, validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("extendedResourceName"), obj.ExtendedResourceName, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClassSpec) *string { return oldObj.ExtendedResourceName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceClassSpec) *string { + return oldObj.ExtendedResourceName + }) + errs = append(errs, fn(fldPath.Child("extendedResourceName"), obj.ExtendedResourceName, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceConfiguration validates an instance of DeviceConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceConfiguration) (errs field.ErrorList) { - // field resourcev1beta1.DeviceConfiguration.Opaque - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.OpaqueDeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceConfiguration.Opaque + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.OpaqueDeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -985,22 +1443,33 @@ func Validate_DeviceConfiguration(ctx context.Context, op operation.Operation, f // call the type's validation function errs = append(errs, Validate_OpaqueDeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("opaque"), obj.Opaque, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceConfiguration) *resourcev1beta1.OpaqueDeviceConfiguration { - return oldObj.Opaque - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceConfiguration) *resourcev1beta1.OpaqueDeviceConfiguration { + return oldObj.Opaque + }) + errs = append(errs, fn(fldPath.Child("opaque"), obj.Opaque, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceConstraint validates an instance of DeviceConstraint according // to declarative validation rules in the API schema. -func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceConstraint) (errs field.ErrorList) { - // field resourcev1beta1.DeviceConstraint.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceConstraint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceConstraint) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceConstraint.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1015,16 +1484,28 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceConstraint) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceConstraint) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceConstraint.MatchAttribute - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.FullyQualifiedName, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceConstraint.MatchAttribute + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.FullyQualifiedName, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1034,11 +1515,17 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("matchAttribute"), obj.MatchAttribute, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceConstraint) *resourcev1beta1.FullyQualifiedName { - return oldObj.MatchAttribute - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceConstraint) *resourcev1beta1.FullyQualifiedName { + return oldObj.MatchAttribute + }) + errs = append(errs, fn(fldPath.Child("matchAttribute"), obj.MatchAttribute, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceConstraint.DistinctAttribute has no validation return errs @@ -1046,13 +1533,20 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP // Validate_DeviceCounterConsumption validates an instance of DeviceCounterConsumption according // to declarative validation rules in the API schema. -func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceCounterConsumption) (errs field.ErrorList) { - // field resourcev1beta1.DeviceCounterConsumption.CounterSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceCounterConsumption( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceCounterConsumption) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceCounterConsumption.CounterSet + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1063,16 +1557,28 @@ func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counterSet"), &obj.CounterSet, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceCounterConsumption) *string { return &oldObj.CounterSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceCounterConsumption) *string { + return &oldObj.CounterSet + }) + errs = append(errs, fn(fldPath.Child("counterSet"), &obj.CounterSet, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceCounterConsumption.Counters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]resourcev1beta1.Counter, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceCounterConsumption.Counters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]resourcev1beta1.Counter, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1083,27 +1589,40 @@ func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counters"), obj.Counters, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceCounterConsumption) map[string]resourcev1beta1.Counter { - return oldObj.Counters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceCounterConsumption) map[string]resourcev1beta1.Counter { + return oldObj.Counters + }) + errs = append(errs, fn(fldPath.Child("counters"), obj.Counters, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceRequest validates an instance of DeviceRequest according // to declarative validation rules in the API schema. -func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceRequest) (errs field.ErrorList) { +func Validate_DeviceRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceRequest) (errs field.ErrorList) { + // field resourcev1beta1.DeviceRequest.Name has no validation // field resourcev1beta1.DeviceRequest.DeviceClassName has no validation - // field resourcev1beta1.DeviceRequest.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequest.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1118,14 +1637,24 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequest) []resourcev1beta1.DeviceSelector { return oldObj.Selectors }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequest) []resourcev1beta1.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceRequest.AllocationMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceAllocationMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequest.AllocationMode + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceAllocationMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1138,19 +1667,27 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_DeviceAllocationMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocationMode"), &obj.AllocationMode, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequest) *resourcev1beta1.DeviceAllocationMode { - return &oldObj.AllocationMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequest) *resourcev1beta1.DeviceAllocationMode { + return &oldObj.AllocationMode + }) + errs = append(errs, fn(fldPath.Child("allocationMode"), &obj.AllocationMode, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceRequest.Count has no validation // field resourcev1beta1.DeviceRequest.AdminAccess has no validation - // field resourcev1beta1.DeviceRequest.FirstAvailable - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceSubRequest, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequest.FirstAvailable + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceSubRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1165,24 +1702,38 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.DeviceSubRequest, b resourcev1beta1.DeviceSubRequest) bool { - return a.Name == b.Name - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.DeviceSubRequest, b resourcev1beta1.DeviceSubRequest) bool { + return a.Name == b.Name + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.DeviceSubRequest, b resourcev1beta1.DeviceSubRequest) bool { - return a.Name == b.Name - }, validate.SemanticDeepEqual, Validate_DeviceSubRequest)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.DeviceSubRequest, b resourcev1beta1.DeviceSubRequest) bool { + return a.Name == b.Name + }, validate.SemanticDeepEqual, Validate_DeviceSubRequest); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("firstAvailable"), obj.FirstAvailable, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequest) []resourcev1beta1.DeviceSubRequest { - return oldObj.FirstAvailable - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequest) []resourcev1beta1.DeviceSubRequest { + return oldObj.FirstAvailable + }) + errs = append(errs, fn(fldPath.Child("firstAvailable"), obj.FirstAvailable, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceRequest.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequest.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1193,11 +1744,17 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequest) []resourcev1beta1.DeviceToleration { - return oldObj.Tolerations - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequest) []resourcev1beta1.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceRequest.Capacity has no validation return errs @@ -1205,15 +1762,22 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath // Validate_DeviceRequestAllocationResult validates an instance of DeviceRequestAllocationResult according // to declarative validation rules in the API schema. -func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceRequestAllocationResult) (errs field.ErrorList) { +func Validate_DeviceRequestAllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceRequestAllocationResult) (errs field.ErrorList) { + // field resourcev1beta1.DeviceRequestAllocationResult.Request has no validation - // field resourcev1beta1.DeviceRequestAllocationResult.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequestAllocationResult.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1224,17 +1788,31 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceRequestAllocationResult.Pool - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequestAllocationResult.Pool + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1245,19 +1823,31 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pool"), &obj.Pool, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) *string { return &oldObj.Pool }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) *string { + return &oldObj.Pool + }) + errs = append(errs, fn(fldPath.Child("pool"), &obj.Pool, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceRequestAllocationResult.Device has no validation // field resourcev1beta1.DeviceRequestAllocationResult.AdminAccess has no validation - // field resourcev1beta1.DeviceRequestAllocationResult.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequestAllocationResult.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1272,18 +1862,28 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) []resourcev1beta1.DeviceToleration { - return oldObj.Tolerations - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) []resourcev1beta1.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceRequestAllocationResult.BindingConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequestAllocationResult.BindingConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1298,14 +1898,24 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } return - }(fldPath.Child("bindingConditions"), obj.BindingConditions, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) []string { return oldObj.BindingConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) []string { + return oldObj.BindingConditions + }) + errs = append(errs, fn(fldPath.Child("bindingConditions"), obj.BindingConditions, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceRequestAllocationResult.BindingFailureConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequestAllocationResult.BindingFailureConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1320,16 +1930,24 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } return - }(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) []string { - return oldObj.BindingFailureConditions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) []string { + return oldObj.BindingFailureConditions + }) + errs = append(errs, fn(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceRequestAllocationResult.ShareID - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *types.UID, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceRequestAllocationResult.ShareID + fn := func( + fldPath *field.Path, + obj, oldObj *types.UID, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1339,9 +1957,17 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shareID"), obj.ShareID, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) *types.UID { return oldObj.ShareID }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceRequestAllocationResult) *types.UID { + return oldObj.ShareID + }) + errs = append(errs, fn(fldPath.Child("shareID"), obj.ShareID, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceRequestAllocationResult.ConsumedCapacity has no validation return errs @@ -1349,15 +1975,22 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op // Validate_DeviceSubRequest validates an instance of DeviceSubRequest according // to declarative validation rules in the API schema. -func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceSubRequest) (errs field.ErrorList) { +func Validate_DeviceSubRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceSubRequest) (errs field.ErrorList) { + // field resourcev1beta1.DeviceSubRequest.Name has no validation - // field resourcev1beta1.DeviceSubRequest.DeviceClassName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceSubRequest.DeviceClassName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1368,16 +2001,28 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("deviceClassName"), &obj.DeviceClassName, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceSubRequest) *string { return &oldObj.DeviceClassName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceSubRequest) *string { + return &oldObj.DeviceClassName + }) + errs = append(errs, fn(fldPath.Child("deviceClassName"), &obj.DeviceClassName, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceSubRequest.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceSubRequest.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1392,16 +2037,24 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceSubRequest) []resourcev1beta1.DeviceSelector { - return oldObj.Selectors - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceSubRequest) []resourcev1beta1.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceSubRequest.AllocationMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceAllocationMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceSubRequest.AllocationMode + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceAllocationMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1414,18 +2067,26 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceAllocationMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocationMode"), &obj.AllocationMode, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceSubRequest) *resourcev1beta1.DeviceAllocationMode { - return &oldObj.AllocationMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceSubRequest) *resourcev1beta1.DeviceAllocationMode { + return &oldObj.AllocationMode + }) + errs = append(errs, fn(fldPath.Child("allocationMode"), &obj.AllocationMode, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceSubRequest.Count has no validation - // field resourcev1beta1.DeviceSubRequest.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceSubRequest.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1436,11 +2097,17 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceSubRequest) []resourcev1beta1.DeviceToleration { - return oldObj.Tolerations - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceSubRequest) []resourcev1beta1.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceSubRequest.Capacity has no validation return errs @@ -1448,16 +2115,23 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP // Validate_DeviceTaint validates an instance of DeviceTaint according // to declarative validation rules in the API schema. -func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceTaint) (errs field.ErrorList) { +func Validate_DeviceTaint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceTaint) (errs field.ErrorList) { + // field resourcev1beta1.DeviceTaint.Key has no validation // field resourcev1beta1.DeviceTaint.Value has no validation - // field resourcev1beta1.DeviceTaint.Effect - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceTaintEffect, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceTaint.Effect + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceTaintEffect, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1471,7 +2145,13 @@ func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath * // call the type's validation function errs = append(errs, Validate_DeviceTaintEffect(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("effect"), &obj.Effect, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceTaint) *resourcev1beta1.DeviceTaintEffect { return &oldObj.Effect }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceTaint) *resourcev1beta1.DeviceTaintEffect { + return &oldObj.Effect + }) + errs = append(errs, fn(fldPath.Child("effect"), &obj.Effect, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceTaint.TimeAdded has no validation return errs @@ -1481,21 +2161,33 @@ var symbolsForDeviceTaintEffect = sets.New(resourcev1beta1.DeviceTaintEffectNoEx // Validate_DeviceTaintEffect validates an instance of DeviceTaintEffect according // to declarative validation rules in the API schema. -func Validate_DeviceTaintEffect(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceTaintEffect) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil).MarkAlpha()...) +func Validate_DeviceTaintEffect( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceTaintEffect) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DeviceToleration validates an instance of DeviceToleration according // to declarative validation rules in the API schema. -func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceToleration) (errs field.ErrorList) { - // field resourcev1beta1.DeviceToleration.Key - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceToleration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceToleration) (errs field.ErrorList) { + + { // field resourcev1beta1.DeviceToleration.Key + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1505,16 +2197,28 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.LabelKey(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.LabelKey(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("key"), &obj.Key, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceToleration) *string { return &oldObj.Key }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceToleration) *string { + return &oldObj.Key + }) + errs = append(errs, fn(fldPath.Child("key"), &obj.Key, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.DeviceToleration.Operator - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceTolerationOperator, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceToleration.Operator + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceTolerationOperator, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1529,18 +2233,26 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceTolerationOperator(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("operator"), &obj.Operator, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceToleration) *resourcev1beta1.DeviceTolerationOperator { - return &oldObj.Operator - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceToleration) *resourcev1beta1.DeviceTolerationOperator { + return &oldObj.Operator + }) + errs = append(errs, fn(fldPath.Child("operator"), &obj.Operator, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceToleration.Value has no validation - // field resourcev1beta1.DeviceToleration.Effect - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceTaintEffect, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.DeviceToleration.Effect + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceTaintEffect, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1553,9 +2265,13 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceTaintEffect(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("effect"), &obj.Effect, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceToleration) *resourcev1beta1.DeviceTaintEffect { - return &oldObj.Effect - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.DeviceToleration) *resourcev1beta1.DeviceTaintEffect { + return &oldObj.Effect + }) + errs = append(errs, fn(fldPath.Child("effect"), &obj.Effect, oldVal, oldObj != nil)...) + } // field resourcev1beta1.DeviceToleration.TolerationSeconds has no validation return errs @@ -1565,21 +2281,33 @@ var symbolsForDeviceTolerationOperator = sets.New(resourcev1beta1.DeviceTolerati // Validate_DeviceTolerationOperator validates an instance of DeviceTolerationOperator according // to declarative validation rules in the API schema. -func Validate_DeviceTolerationOperator(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceTolerationOperator) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTolerationOperator, nil).MarkAlpha()...) +func Validate_DeviceTolerationOperator( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceTolerationOperator) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTolerationOperator, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_NetworkDeviceData validates an instance of NetworkDeviceData according // to declarative validation rules in the API schema. -func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.NetworkDeviceData) (errs field.ErrorList) { - // field resourcev1beta1.NetworkDeviceData.InterfaceName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_NetworkDeviceData( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.NetworkDeviceData) (errs field.ErrorList) { + + { // field resourcev1beta1.NetworkDeviceData.InterfaceName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1589,16 +2317,28 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256).MarkAlpha()...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("interfaceName"), &obj.InterfaceName, safe.Field(oldObj, func(oldObj *resourcev1beta1.NetworkDeviceData) *string { return &oldObj.InterfaceName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.NetworkDeviceData) *string { + return &oldObj.InterfaceName + }) + errs = append(errs, fn(fldPath.Child("interfaceName"), &obj.InterfaceName, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.NetworkDeviceData.IPs - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.NetworkDeviceData.IPs + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1613,16 +2353,28 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ips"), obj.IPs, safe.Field(oldObj, func(oldObj *resourcev1beta1.NetworkDeviceData) []string { return oldObj.IPs }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.NetworkDeviceData) []string { + return oldObj.IPs + }) + errs = append(errs, fn(fldPath.Child("ips"), obj.IPs, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.NetworkDeviceData.HardwareAddress - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.NetworkDeviceData.HardwareAddress + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1632,22 +2384,37 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 128).MarkAlpha()...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 128).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("hardwareAddress"), &obj.HardwareAddress, safe.Field(oldObj, func(oldObj *resourcev1beta1.NetworkDeviceData) *string { return &oldObj.HardwareAddress }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.NetworkDeviceData) *string { + return &oldObj.HardwareAddress + }) + errs = append(errs, fn(fldPath.Child("hardwareAddress"), &obj.HardwareAddress, oldVal, oldObj != nil)...) + } return errs } // Validate_OpaqueDeviceConfiguration validates an instance of OpaqueDeviceConfiguration according // to declarative validation rules in the API schema. -func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.OpaqueDeviceConfiguration) (errs field.ErrorList) { - // field resourcev1beta1.OpaqueDeviceConfiguration.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_OpaqueDeviceConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.OpaqueDeviceConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta1.OpaqueDeviceConfiguration.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1658,10 +2425,20 @@ func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operat if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1beta1.OpaqueDeviceConfiguration) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.OpaqueDeviceConfiguration) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } // field resourcev1beta1.OpaqueDeviceConfiguration.Parameters has no validation return errs @@ -1669,16 +2446,23 @@ func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operat // Validate_ResourceClaim validates an instance of ResourceClaim according // to declarative validation rules in the API schema. -func Validate_ResourceClaim(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaim) (errs field.ErrorList) { +func Validate_ResourceClaim( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaim) (errs field.ErrorList) { + // field resourcev1beta1.ResourceClaim.TypeMeta has no validation // field resourcev1beta1.ResourceClaim.ObjectMeta has no validation - // field resourcev1beta1.ResourceClaim.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceClaim.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1692,52 +2476,86 @@ func Validate_ResourceClaim(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_ResourceClaimSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaim) *resourcev1beta1.ResourceClaimSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaim) *resourcev1beta1.ResourceClaimSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.ResourceClaim.Status - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceClaim.Status + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimStatus(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("status"), &obj.Status, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaim) *resourcev1beta1.ResourceClaimStatus { - return &oldObj.Status - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaim) *resourcev1beta1.ResourceClaimStatus { + return &oldObj.Status + }) + errs = append(errs, fn(fldPath.Child("status"), &obj.Status, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimSpec validates an instance of ResourceClaimSpec according // to declarative validation rules in the API schema. -func Validate_ResourceClaimSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimSpec) (errs field.ErrorList) { - // field resourcev1beta1.ResourceClaimSpec.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.DeviceClaim, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourceClaimSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimSpec) (errs field.ErrorList) { + + { // field resourcev1beta1.ResourceClaimSpec.Devices + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.DeviceClaim, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceClaim(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("devices"), &obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaimSpec) *resourcev1beta1.DeviceClaim { return &oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaimSpec) *resourcev1beta1.DeviceClaim { + return &oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), &obj.Devices, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimStatus validates an instance of ResourceClaimStatus according // to declarative validation rules in the API schema. -func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimStatus) (errs field.ErrorList) { - // field resourcev1beta1.ResourceClaimStatus.Allocation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.AllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourceClaimStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimStatus) (errs field.ErrorList) { + + { // field resourcev1beta1.ResourceClaimStatus.Allocation + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.AllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1754,16 +2572,24 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f // call the type's validation function errs = append(errs, Validate_AllocationResult(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocation"), obj.Allocation, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaimStatus) *resourcev1beta1.AllocationResult { - return oldObj.Allocation - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaimStatus) *resourcev1beta1.AllocationResult { + return oldObj.Allocation + }) + errs = append(errs, fn(fldPath.Child("allocation"), obj.Allocation, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.ResourceClaimStatus.ReservedFor - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.ResourceClaimConsumerReference, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceClaimStatus.ReservedFor + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.ResourceClaimConsumerReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1778,20 +2604,31 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.ResourceClaimConsumerReference, b resourcev1beta1.ResourceClaimConsumerReference) bool { - return a.UID == b.UID - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.ResourceClaimConsumerReference, b resourcev1beta1.ResourceClaimConsumerReference) bool { + return a.UID == b.UID + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("reservedFor"), obj.ReservedFor, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaimStatus) []resourcev1beta1.ResourceClaimConsumerReference { - return oldObj.ReservedFor - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaimStatus) []resourcev1beta1.ResourceClaimConsumerReference { + return oldObj.ReservedFor + }) + errs = append(errs, fn(fldPath.Child("reservedFor"), obj.ReservedFor, oldVal, oldObj != nil)...) + } - // field resourcev1beta1.ResourceClaimStatus.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.AllocatedDeviceStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceClaimStatus.Devices + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.AllocatedDeviceStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1802,102 +2639,154 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.AllocatedDeviceStatus, b resourcev1beta1.AllocatedDeviceStatus) bool { - return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.AllocatedDeviceStatus, b resourcev1beta1.AllocatedDeviceStatus) bool { + return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.AllocatedDeviceStatus, b resourcev1beta1.AllocatedDeviceStatus) bool { - return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) - }, validate.SemanticDeepEqual, Validate_AllocatedDeviceStatus)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.AllocatedDeviceStatus, b resourcev1beta1.AllocatedDeviceStatus) bool { + return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) + }, validate.SemanticDeepEqual, Validate_AllocatedDeviceStatus); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("devices"), obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaimStatus) []resourcev1beta1.AllocatedDeviceStatus { - return oldObj.Devices - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaimStatus) []resourcev1beta1.AllocatedDeviceStatus { + return oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), obj.Devices, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimTemplate validates an instance of ResourceClaimTemplate according // to declarative validation rules in the API schema. -func Validate_ResourceClaimTemplate(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimTemplate) (errs field.ErrorList) { +func Validate_ResourceClaimTemplate( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimTemplate) (errs field.ErrorList) { + // field resourcev1beta1.ResourceClaimTemplate.TypeMeta has no validation // field resourcev1beta1.ResourceClaimTemplate.ObjectMeta has no validation - // field resourcev1beta1.ResourceClaimTemplate.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimTemplateSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceClaimTemplate.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimTemplateSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimTemplateSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaimTemplate) *resourcev1beta1.ResourceClaimTemplateSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaimTemplate) *resourcev1beta1.ResourceClaimTemplateSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimTemplateSpec validates an instance of ResourceClaimTemplateSpec according // to declarative validation rules in the API schema. -func Validate_ResourceClaimTemplateSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimTemplateSpec) (errs field.ErrorList) { +func Validate_ResourceClaimTemplateSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimTemplateSpec) (errs field.ErrorList) { + // field resourcev1beta1.ResourceClaimTemplateSpec.ObjectMeta has no validation - // field resourcev1beta1.ResourceClaimTemplateSpec.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceClaimSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceClaimTemplateSpec.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceClaimSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceClaimTemplateSpec) *resourcev1beta1.ResourceClaimSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceClaimTemplateSpec) *resourcev1beta1.ResourceClaimSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceSlice validates an instance of ResourceSlice according // to declarative validation rules in the API schema. -func Validate_ResourceSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceSlice) (errs field.ErrorList) { +func Validate_ResourceSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceSlice) (errs field.ErrorList) { + // field resourcev1beta1.ResourceSlice.TypeMeta has no validation // field resourcev1beta1.ResourceSlice.ObjectMeta has no validation - // field resourcev1beta1.ResourceSlice.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceSliceSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceSlice.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceSliceSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceSliceSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceSlice) *resourcev1beta1.ResourceSliceSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceSlice) *resourcev1beta1.ResourceSliceSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceSliceSpec validates an instance of ResourceSliceSpec according // to declarative validation rules in the API schema. -func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta1.ResourceSliceSpec) (errs field.ErrorList) { +func Validate_ResourceSliceSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta1.ResourceSliceSpec) (errs field.ErrorList) { + // field resourcev1beta1.ResourceSliceSpec.Driver has no validation // field resourcev1beta1.ResourceSliceSpec.Pool has no validation // field resourcev1beta1.ResourceSliceSpec.NodeName has no validation // field resourcev1beta1.ResourceSliceSpec.NodeSelector has no validation // field resourcev1beta1.ResourceSliceSpec.AllNodes has no validation - // field resourcev1beta1.ResourceSliceSpec.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.Device, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceSliceSpec.Devices + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.Device, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1908,18 +2797,30 @@ func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Device)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Device); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("devices"), obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceSliceSpec) []resourcev1beta1.Device { return oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceSliceSpec) []resourcev1beta1.Device { + return oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), obj.Devices, oldVal, oldObj != nil)...) + } // field resourcev1beta1.ResourceSliceSpec.PerDeviceNodeSelection has no validation - // field resourcev1beta1.ResourceSliceSpec.SharedCounters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta1.CounterSet, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta1.ResourceSliceSpec.SharedCounters + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta1.CounterSet, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1934,13 +2835,23 @@ func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.CounterSet, b resourcev1beta1.CounterSet) bool { return a.Name == b.Name }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.CounterSet, b resourcev1beta1.CounterSet) bool { return a.Name == b.Name }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta1.CounterSet, b resourcev1beta1.CounterSet) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_CounterSet)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta1.CounterSet, b resourcev1beta1.CounterSet) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_CounterSet); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sharedCounters"), obj.SharedCounters, safe.Field(oldObj, func(oldObj *resourcev1beta1.ResourceSliceSpec) []resourcev1beta1.CounterSet { - return oldObj.SharedCounters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta1.ResourceSliceSpec) []resourcev1beta1.CounterSet { + return oldObj.SharedCounters + }) + errs = append(errs, fn(fldPath.Child("sharedCounters"), obj.SharedCounters, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/resource/v1beta2/zz_generated.validations.go b/pkg/apis/resource/v1beta2/zz_generated.validations.go index 082a1074faf..d6469290096 100644 --- a/pkg/apis/resource/v1beta2/zz_generated.validations.go +++ b/pkg/apis/resource/v1beta2/zz_generated.validations.go @@ -43,61 +43,103 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type DeviceClass - scheme.AddValidationFunc((*resourcev1beta2.DeviceClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_DeviceClass(ctx, op, nil /* fldPath */, obj.(*resourcev1beta2.DeviceClass), safe.Cast[*resourcev1beta2.DeviceClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta2.DeviceClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_DeviceClass( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta2.DeviceClass), + safe.Cast[*resourcev1beta2.DeviceClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type DeviceTaintRule - scheme.AddValidationFunc((*resourcev1beta2.DeviceTaintRule)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_DeviceTaintRule(ctx, op, nil /* fldPath */, obj.(*resourcev1beta2.DeviceTaintRule), safe.Cast[*resourcev1beta2.DeviceTaintRule](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta2.DeviceTaintRule)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_DeviceTaintRule( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta2.DeviceTaintRule), + safe.Cast[*resourcev1beta2.DeviceTaintRule](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceClaim - scheme.AddValidationFunc((*resourcev1beta2.ResourceClaim)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_ResourceClaim(ctx, op, nil /* fldPath */, obj.(*resourcev1beta2.ResourceClaim), safe.Cast[*resourcev1beta2.ResourceClaim](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta2.ResourceClaim)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_ResourceClaim( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta2.ResourceClaim), + safe.Cast[*resourcev1beta2.ResourceClaim](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceClaimTemplate - scheme.AddValidationFunc((*resourcev1beta2.ResourceClaimTemplate)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ResourceClaimTemplate(ctx, op, nil /* fldPath */, obj.(*resourcev1beta2.ResourceClaimTemplate), safe.Cast[*resourcev1beta2.ResourceClaimTemplate](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta2.ResourceClaimTemplate)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ResourceClaimTemplate( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta2.ResourceClaimTemplate), + safe.Cast[*resourcev1beta2.ResourceClaimTemplate](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ResourceSlice - scheme.AddValidationFunc((*resourcev1beta2.ResourceSlice)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ResourceSlice(ctx, op, nil /* fldPath */, obj.(*resourcev1beta2.ResourceSlice), safe.Cast[*resourcev1beta2.ResourceSlice](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*resourcev1beta2.ResourceSlice)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ResourceSlice( + ctx, op, nil, /* fldPath */ + obj.(*resourcev1beta2.ResourceSlice), + safe.Cast[*resourcev1beta2.ResourceSlice](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_AllocatedDeviceStatus validates an instance of AllocatedDeviceStatus according // to declarative validation rules in the API schema. -func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.AllocatedDeviceStatus) (errs field.ErrorList) { +func Validate_AllocatedDeviceStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.AllocatedDeviceStatus) (errs field.ErrorList) { + // field resourcev1beta2.AllocatedDeviceStatus.Driver has no validation // field resourcev1beta2.AllocatedDeviceStatus.Pool has no validation // field resourcev1beta2.AllocatedDeviceStatus.Device has no validation - // field resourcev1beta2.AllocatedDeviceStatus.ShareID - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.AllocatedDeviceStatus.ShareID + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -107,19 +149,31 @@ func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shareID"), obj.ShareID, safe.Field(oldObj, func(oldObj *resourcev1beta2.AllocatedDeviceStatus) *string { return oldObj.ShareID }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.AllocatedDeviceStatus) *string { + return oldObj.ShareID + }) + errs = append(errs, fn(fldPath.Child("shareID"), obj.ShareID, oldVal, oldObj != nil)...) + } // field resourcev1beta2.AllocatedDeviceStatus.Conditions has no validation // field resourcev1beta2.AllocatedDeviceStatus.Data has no validation - // field resourcev1beta2.AllocatedDeviceStatus.NetworkData - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.NetworkDeviceData, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.AllocatedDeviceStatus.NetworkData + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.NetworkDeviceData, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -132,9 +186,13 @@ func Validate_AllocatedDeviceStatus(ctx context.Context, op operation.Operation, // call the type's validation function errs = append(errs, Validate_NetworkDeviceData(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("networkData"), obj.NetworkData, safe.Field(oldObj, func(oldObj *resourcev1beta2.AllocatedDeviceStatus) *resourcev1beta2.NetworkDeviceData { - return oldObj.NetworkData - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.AllocatedDeviceStatus) *resourcev1beta2.NetworkDeviceData { + return oldObj.NetworkData + }) + errs = append(errs, fn(fldPath.Child("networkData"), obj.NetworkData, oldVal, oldObj != nil)...) + } return errs } @@ -143,28 +201,44 @@ var symbolsForAllocationConfigSource = sets.New(resourcev1beta2.AllocationConfig // Validate_AllocationConfigSource validates an instance of AllocationConfigSource according // to declarative validation rules in the API schema. -func Validate_AllocationConfigSource(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.AllocationConfigSource) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAllocationConfigSource, nil).MarkAlpha()...) +func Validate_AllocationConfigSource( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.AllocationConfigSource) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForAllocationConfigSource, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_AllocationResult validates an instance of AllocationResult according // to declarative validation rules in the API schema. -func Validate_AllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.AllocationResult) (errs field.ErrorList) { - // field resourcev1beta2.AllocationResult.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceAllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_AllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.AllocationResult) (errs field.ErrorList) { + + { // field resourcev1beta2.AllocationResult.Devices + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceAllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceAllocationResult(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("devices"), &obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta2.AllocationResult) *resourcev1beta2.DeviceAllocationResult { - return &oldObj.Devices - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.AllocationResult) *resourcev1beta2.DeviceAllocationResult { + return &oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), &obj.Devices, oldVal, oldObj != nil)...) + } // field resourcev1beta2.AllocationResult.NodeSelector has no validation // field resourcev1beta2.AllocationResult.AllocationTimestamp has no validation @@ -173,13 +247,20 @@ func Validate_AllocationResult(ctx context.Context, op operation.Operation, fldP // Validate_CounterSet validates an instance of CounterSet according // to declarative validation rules in the API schema. -func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.CounterSet) (errs field.ErrorList) { - // field resourcev1beta2.CounterSet.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_CounterSet( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.CounterSet) (errs field.ErrorList) { + + { // field resourcev1beta2.CounterSet.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -190,16 +271,28 @@ func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *resourcev1beta2.CounterSet) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.CounterSet) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.CounterSet.Counters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]resourcev1beta2.Counter, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.CounterSet.Counters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]resourcev1beta2.Counter, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -210,24 +303,39 @@ func Validate_CounterSet(ctx context.Context, op operation.Operation, fldPath *f if earlyReturn { return // do not proceed } - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counters"), obj.Counters, safe.Field(oldObj, func(oldObj *resourcev1beta2.CounterSet) map[string]resourcev1beta2.Counter { return oldObj.Counters }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.CounterSet) map[string]resourcev1beta2.Counter { + return oldObj.Counters + }) + errs = append(errs, fn(fldPath.Child("counters"), obj.Counters, oldVal, oldObj != nil)...) + } return errs } // Validate_Device validates an instance of Device according // to declarative validation rules in the API schema. -func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.Device) (errs field.ErrorList) { +func Validate_Device( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.Device) (errs field.ErrorList) { + // field resourcev1beta2.Device.Name has no validation - // field resourcev1beta2.Device.Attributes - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[resourcev1beta2.QualifiedName]resourcev1beta2.DeviceAttribute, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.Device.Attributes + fn := func( + fldPath *field.Path, + obj, oldObj map[resourcev1beta2.QualifiedName]resourcev1beta2.DeviceAttribute, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -238,20 +346,30 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_DeviceAttribute)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_DeviceAttribute); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("attributes"), obj.Attributes, safe.Field(oldObj, func(oldObj *resourcev1beta2.Device) map[resourcev1beta2.QualifiedName]resourcev1beta2.DeviceAttribute { - return oldObj.Attributes - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.Device) map[resourcev1beta2.QualifiedName]resourcev1beta2.DeviceAttribute { + return oldObj.Attributes + }) + errs = append(errs, fn(fldPath.Child("attributes"), obj.Attributes, oldVal, oldObj != nil)...) + } // field resourcev1beta2.Device.Capacity has no validation - // field resourcev1beta2.Device.ConsumesCounters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceCounterConsumption, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.Device.ConsumesCounters + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceCounterConsumption, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -266,28 +384,42 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.DeviceCounterConsumption, b resourcev1beta2.DeviceCounterConsumption) bool { - return a.CounterSet == b.CounterSet - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.DeviceCounterConsumption, b resourcev1beta2.DeviceCounterConsumption) bool { + return a.CounterSet == b.CounterSet + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.DeviceCounterConsumption, b resourcev1beta2.DeviceCounterConsumption) bool { - return a.CounterSet == b.CounterSet - }, validate.SemanticDeepEqual, Validate_DeviceCounterConsumption)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.DeviceCounterConsumption, b resourcev1beta2.DeviceCounterConsumption) bool { + return a.CounterSet == b.CounterSet + }, validate.SemanticDeepEqual, Validate_DeviceCounterConsumption); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("consumesCounters"), obj.ConsumesCounters, safe.Field(oldObj, func(oldObj *resourcev1beta2.Device) []resourcev1beta2.DeviceCounterConsumption { - return oldObj.ConsumesCounters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.Device) []resourcev1beta2.DeviceCounterConsumption { + return oldObj.ConsumesCounters + }) + errs = append(errs, fn(fldPath.Child("consumesCounters"), obj.ConsumesCounters, oldVal, oldObj != nil)...) + } // field resourcev1beta2.Device.NodeName has no validation // field resourcev1beta2.Device.NodeSelector has no validation // field resourcev1beta2.Device.AllNodes has no validation - // field resourcev1beta2.Device.Taints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceTaint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.Device.Taints + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceTaint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -298,18 +430,30 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceTaint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceTaint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("taints"), obj.Taints, safe.Field(oldObj, func(oldObj *resourcev1beta2.Device) []resourcev1beta2.DeviceTaint { return oldObj.Taints }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.Device) []resourcev1beta2.DeviceTaint { + return oldObj.Taints + }) + errs = append(errs, fn(fldPath.Child("taints"), obj.Taints, oldVal, oldObj != nil)...) + } // field resourcev1beta2.Device.BindsToNode has no validation - // field resourcev1beta2.Device.BindingConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.Device.BindingConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -324,14 +468,24 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("bindingConditions"), obj.BindingConditions, safe.Field(oldObj, func(oldObj *resourcev1beta2.Device) []string { return oldObj.BindingConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.Device) []string { + return oldObj.BindingConditions + }) + errs = append(errs, fn(fldPath.Child("bindingConditions"), obj.BindingConditions, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.Device.BindingFailureConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.Device.BindingFailureConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -346,7 +500,13 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, safe.Field(oldObj, func(oldObj *resourcev1beta2.Device) []string { return oldObj.BindingFailureConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.Device) []string { + return oldObj.BindingFailureConditions + }) + errs = append(errs, fn(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, oldVal, oldObj != nil)...) + } // field resourcev1beta2.Device.AllowMultipleAllocations has no validation // field resourcev1beta2.Device.NodeAllocatableResourceMappings has no validation @@ -355,13 +515,20 @@ func Validate_Device(ctx context.Context, op operation.Operation, fldPath *field // Validate_DeviceAllocationConfiguration validates an instance of DeviceAllocationConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceAllocationConfiguration) (errs field.ErrorList) { - // field resourcev1beta2.DeviceAllocationConfiguration.Source - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.AllocationConfigSource, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceAllocationConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceAllocationConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceAllocationConfiguration.Source + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.AllocationConfigSource, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -375,16 +542,24 @@ func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Op // call the type's validation function errs = append(errs, Validate_AllocationConfigSource(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("source"), &obj.Source, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAllocationConfiguration) *resourcev1beta2.AllocationConfigSource { - return &oldObj.Source - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAllocationConfiguration) *resourcev1beta2.AllocationConfigSource { + return &oldObj.Source + }) + errs = append(errs, fn(fldPath.Child("source"), &obj.Source, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAllocationConfiguration.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAllocationConfiguration.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -399,23 +574,39 @@ func Validate_DeviceAllocationConfiguration(ctx context.Context, op operation.Op return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAllocationConfiguration) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAllocationConfiguration) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAllocationConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAllocationConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta2.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAllocationConfiguration) *resourcev1beta2.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAllocationConfiguration) *resourcev1beta2.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta2.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } @@ -424,21 +615,33 @@ var symbolsForDeviceAllocationMode = sets.New(resourcev1beta2.DeviceAllocationMo // Validate_DeviceAllocationMode validates an instance of DeviceAllocationMode according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationMode(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceAllocationMode) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceAllocationMode, nil).MarkAlpha()...) +func Validate_DeviceAllocationMode( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceAllocationMode) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceAllocationMode, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DeviceAllocationResult validates an instance of DeviceAllocationResult according // to declarative validation rules in the API schema. -func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceAllocationResult) (errs field.ErrorList) { - // field resourcev1beta2.DeviceAllocationResult.Results - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceRequestAllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceAllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceAllocationResult) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceAllocationResult.Results + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceRequestAllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -453,18 +656,28 @@ func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceRequestAllocationResult)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceRequestAllocationResult); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("results"), obj.Results, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAllocationResult) []resourcev1beta2.DeviceRequestAllocationResult { - return oldObj.Results - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAllocationResult) []resourcev1beta2.DeviceRequestAllocationResult { + return oldObj.Results + }) + errs = append(errs, fn(fldPath.Child("results"), obj.Results, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAllocationResult.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceAllocationConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAllocationResult.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceAllocationConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -479,11 +692,17 @@ func Validate_DeviceAllocationResult(ctx context.Context, op operation.Operation return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceAllocationConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceAllocationConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAllocationResult) []resourcev1beta2.DeviceAllocationConfiguration { - return oldObj.Config - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAllocationResult) []resourcev1beta2.DeviceAllocationConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } return errs } @@ -492,55 +711,72 @@ var unionMembershipFor_k8s_io_api_resource_v1beta2_DeviceAttribute_ = validate.N // Validate_DeviceAttribute validates an instance of DeviceAttribute according // to declarative validation rules in the API schema. -func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceAttribute) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_resource_v1beta2_DeviceAttribute_, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.IntValue != nil - }, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.BoolValue != nil - }, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.StringValue != nil - }, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return obj.VersionValue != nil - }, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.IntValues) != 0 - }, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.BoolValues) != 0 - }, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.StringValues) != 0 - }, func(obj *resourcev1beta2.DeviceAttribute) bool { - if obj == nil { - return false - } - return len(obj.VersionValues) != 0 - }).MarkAlpha()...) +func Validate_DeviceAttribute( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceAttribute) (errs field.ErrorList) { - // field resourcev1beta2.DeviceAttribute.IntValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int64, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_resource_v1beta2_DeviceAttribute_, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.IntValue != nil + }, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.BoolValue != nil + }, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.StringValue != nil + }, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return obj.VersionValue != nil + }, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.IntValues) != 0 + }, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.BoolValues) != 0 + }, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.StringValues) != 0 + }, + func(obj *resourcev1beta2.DeviceAttribute) bool { + if obj == nil { + return false + } + return len(obj.VersionValues) != 0 + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + + { // field resourcev1beta2.DeviceAttribute.IntValue + fn := func( + fldPath *field.Path, + obj, oldObj *int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -551,14 +787,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("int"), obj.IntValue, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) *int64 { return oldObj.IntValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) *int64 { + return oldObj.IntValue + }) + errs = append(errs, fn(fldPath.Child("int"), obj.IntValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAttribute.BoolValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAttribute.BoolValue + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -569,14 +815,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("bool"), obj.BoolValue, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) *bool { return oldObj.BoolValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) *bool { + return oldObj.BoolValue + }) + errs = append(errs, fn(fldPath.Child("bool"), obj.BoolValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAttribute.StringValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAttribute.StringValue + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -587,14 +843,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("string"), obj.StringValue, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) *string { return oldObj.StringValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) *string { + return oldObj.StringValue + }) + errs = append(errs, fn(fldPath.Child("string"), obj.StringValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAttribute.VersionValue - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAttribute.VersionValue + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -605,14 +871,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("version"), obj.VersionValue, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) *string { return oldObj.VersionValue }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) *string { + return oldObj.VersionValue + }) + errs = append(errs, fn(fldPath.Child("version"), obj.VersionValue, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAttribute.IntValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAttribute.IntValues + fn := func( + fldPath *field.Path, + obj, oldObj []int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -623,14 +899,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("ints"), obj.IntValues, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) []int64 { return oldObj.IntValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) []int64 { + return oldObj.IntValues + }) + errs = append(errs, fn(fldPath.Child("ints"), obj.IntValues, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAttribute.BoolValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAttribute.BoolValues + fn := func( + fldPath *field.Path, + obj, oldObj []bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -641,14 +927,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("bools"), obj.BoolValues, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) []bool { return oldObj.BoolValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) []bool { + return oldObj.BoolValues + }) + errs = append(errs, fn(fldPath.Child("bools"), obj.BoolValues, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAttribute.StringValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAttribute.StringValues + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -659,14 +955,24 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("strings"), obj.StringValues, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) []string { return oldObj.StringValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) []string { + return oldObj.StringValues + }) + errs = append(errs, fn(fldPath.Child("strings"), obj.StringValues, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceAttribute.VersionValues - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceAttribute.VersionValues + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -677,20 +983,33 @@ func Validate_DeviceAttribute(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("versions"), obj.VersionValues, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceAttribute) []string { return oldObj.VersionValues }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceAttribute) []string { + return oldObj.VersionValues + }) + errs = append(errs, fn(fldPath.Child("versions"), obj.VersionValues, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClaim validates an instance of DeviceClaim according // to declarative validation rules in the API schema. -func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceClaim) (errs field.ErrorList) { - // field resourcev1beta2.DeviceClaim.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceRequest, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClaim( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceClaim) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceClaim.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -705,18 +1024,34 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.DeviceRequest, b resourcev1beta2.DeviceRequest) bool { return a.Name == b.Name }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.DeviceRequest, b resourcev1beta2.DeviceRequest) bool { return a.Name == b.Name }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.DeviceRequest, b resourcev1beta2.DeviceRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceRequest)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.DeviceRequest, b resourcev1beta2.DeviceRequest) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_DeviceRequest); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClaim) []resourcev1beta2.DeviceRequest { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClaim) []resourcev1beta2.DeviceRequest { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceClaim.Constraints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceConstraint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceClaim.Constraints + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceConstraint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -731,18 +1066,28 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceConstraint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceConstraint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("constraints"), obj.Constraints, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClaim) []resourcev1beta2.DeviceConstraint { - return oldObj.Constraints - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClaim) []resourcev1beta2.DeviceConstraint { + return oldObj.Constraints + }) + errs = append(errs, fn(fldPath.Child("constraints"), obj.Constraints, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceClaim.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceClaimConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceClaim.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceClaimConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -757,24 +1102,37 @@ func Validate_DeviceClaim(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClaimConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClaimConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClaim) []resourcev1beta2.DeviceClaimConfiguration { - return oldObj.Config - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClaim) []resourcev1beta2.DeviceClaimConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClaimConfiguration validates an instance of DeviceClaimConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceClaimConfiguration) (errs field.ErrorList) { - // field resourcev1beta2.DeviceClaimConfiguration.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClaimConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceClaimConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceClaimConfiguration.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -789,97 +1147,158 @@ func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operati return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClaimConfiguration) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClaimConfiguration) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceClaimConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceClaimConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta2.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClaimConfiguration) *resourcev1beta2.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClaimConfiguration) *resourcev1beta2.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta2.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClass validates an instance of DeviceClass according // to declarative validation rules in the API schema. -func Validate_DeviceClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceClass) (errs field.ErrorList) { +func Validate_DeviceClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceClass) (errs field.ErrorList) { + // field resourcev1beta2.DeviceClass.TypeMeta has no validation - // field resourcev1beta2.DeviceClass.ObjectMeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *v1.ObjectMeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceClass.ObjectMeta + fn := func( + fldPath *field.Path, + obj, oldObj *v1.ObjectMeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort name + func() { // cohort = "name" earlyReturn := false - if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.OptionalValue).MarkAlpha(); len(e) != 0 { earlyReturn = true } if earlyReturn { return // do not proceed } - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha()...) + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *v1.ObjectMeta) *string { return &o.Name }, validate.DirectEqualPtr, validate.LongName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("metadata"), &obj.ObjectMeta, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClass) *v1.ObjectMeta { return &oldObj.ObjectMeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClass) *v1.ObjectMeta { + return &oldObj.ObjectMeta + }) + errs = append(errs, fn(fldPath.Child("metadata"), &obj.ObjectMeta, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceClass.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceClassSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceClass.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceClassSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceClassSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClass) *resourcev1beta2.DeviceClassSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClass) *resourcev1beta2.DeviceClassSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClassConfiguration validates an instance of DeviceClassConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceClassConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceClassConfiguration) (errs field.ErrorList) { - // field resourcev1beta2.DeviceClassConfiguration.DeviceConfiguration - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClassConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceClassConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceClassConfiguration.DeviceConfiguration + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta2.DeviceConfiguration") }), &obj.DeviceConfiguration, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClassConfiguration) *resourcev1beta2.DeviceConfiguration { - return &oldObj.DeviceConfiguration - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClassConfiguration) *resourcev1beta2.DeviceConfiguration { + return &oldObj.DeviceConfiguration + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("resourcev1beta2.DeviceConfiguration") }), &obj.DeviceConfiguration, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceClassSpec validates an instance of DeviceClassSpec according // to declarative validation rules in the API schema. -func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceClassSpec) (errs field.ErrorList) { - // field resourcev1beta2.DeviceClassSpec.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceClassSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceClassSpec) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceClassSpec.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -894,16 +1313,24 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClassSpec) []resourcev1beta2.DeviceSelector { - return oldObj.Selectors - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClassSpec) []resourcev1beta2.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceClassSpec.Config - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceClassConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceClassSpec.Config + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceClassConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -918,18 +1345,28 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClassConfiguration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceClassConfiguration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("config"), obj.Config, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClassSpec) []resourcev1beta2.DeviceClassConfiguration { - return oldObj.Config - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClassSpec) []resourcev1beta2.DeviceClassConfiguration { + return oldObj.Config + }) + errs = append(errs, fn(fldPath.Child("config"), obj.Config, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceClassSpec.ExtendedResourceName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceClassSpec.ExtendedResourceName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -939,22 +1376,37 @@ func Validate_DeviceClassSpec(ctx context.Context, op operation.Operation, fldPa if earlyReturn { return // do not proceed } - errs = append(errs, validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("extendedResourceName"), obj.ExtendedResourceName, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClassSpec) *string { return oldObj.ExtendedResourceName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceClassSpec) *string { + return oldObj.ExtendedResourceName + }) + errs = append(errs, fn(fldPath.Child("extendedResourceName"), obj.ExtendedResourceName, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceConfiguration validates an instance of DeviceConfiguration according // to declarative validation rules in the API schema. -func Validate_DeviceConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceConfiguration) (errs field.ErrorList) { - // field resourcev1beta2.DeviceConfiguration.Opaque - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.OpaqueDeviceConfiguration, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceConfiguration.Opaque + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.OpaqueDeviceConfiguration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -967,22 +1419,33 @@ func Validate_DeviceConfiguration(ctx context.Context, op operation.Operation, f // call the type's validation function errs = append(errs, Validate_OpaqueDeviceConfiguration(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("opaque"), obj.Opaque, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceConfiguration) *resourcev1beta2.OpaqueDeviceConfiguration { - return oldObj.Opaque - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceConfiguration) *resourcev1beta2.OpaqueDeviceConfiguration { + return oldObj.Opaque + }) + errs = append(errs, fn(fldPath.Child("opaque"), obj.Opaque, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceConstraint validates an instance of DeviceConstraint according // to declarative validation rules in the API schema. -func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceConstraint) (errs field.ErrorList) { - // field resourcev1beta2.DeviceConstraint.Requests - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceConstraint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceConstraint) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceConstraint.Requests + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -997,16 +1460,28 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceConstraint) []string { return oldObj.Requests }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceConstraint) []string { + return oldObj.Requests + }) + errs = append(errs, fn(fldPath.Child("requests"), obj.Requests, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceConstraint.MatchAttribute - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.FullyQualifiedName, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceConstraint.MatchAttribute + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.FullyQualifiedName, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1016,11 +1491,17 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("matchAttribute"), obj.MatchAttribute, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceConstraint) *resourcev1beta2.FullyQualifiedName { - return oldObj.MatchAttribute - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceConstraint) *resourcev1beta2.FullyQualifiedName { + return oldObj.MatchAttribute + }) + errs = append(errs, fn(fldPath.Child("matchAttribute"), obj.MatchAttribute, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceConstraint.DistinctAttribute has no validation return errs @@ -1028,13 +1509,20 @@ func Validate_DeviceConstraint(ctx context.Context, op operation.Operation, fldP // Validate_DeviceCounterConsumption validates an instance of DeviceCounterConsumption according // to declarative validation rules in the API schema. -func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceCounterConsumption) (errs field.ErrorList) { - // field resourcev1beta2.DeviceCounterConsumption.CounterSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceCounterConsumption( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceCounterConsumption) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceCounterConsumption.CounterSet + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1045,16 +1533,28 @@ func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counterSet"), &obj.CounterSet, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceCounterConsumption) *string { return &oldObj.CounterSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceCounterConsumption) *string { + return &oldObj.CounterSet + }) + errs = append(errs, fn(fldPath.Child("counterSet"), &obj.CounterSet, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceCounterConsumption.Counters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]resourcev1beta2.Counter, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceCounterConsumption.Counters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]resourcev1beta2.Counter, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1065,26 +1565,39 @@ func Validate_DeviceCounterConsumption(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, validate.ShortName).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("counters"), obj.Counters, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceCounterConsumption) map[string]resourcev1beta2.Counter { - return oldObj.Counters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceCounterConsumption) map[string]resourcev1beta2.Counter { + return oldObj.Counters + }) + errs = append(errs, fn(fldPath.Child("counters"), obj.Counters, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceRequest validates an instance of DeviceRequest according // to declarative validation rules in the API schema. -func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceRequest) (errs field.ErrorList) { +func Validate_DeviceRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceRequest) (errs field.ErrorList) { + // field resourcev1beta2.DeviceRequest.Name has no validation - // field resourcev1beta2.DeviceRequest.Exactly - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.ExactDeviceRequest, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequest.Exactly + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.ExactDeviceRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1097,14 +1610,24 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_ExactDeviceRequest(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("exactly"), obj.Exactly, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequest) *resourcev1beta2.ExactDeviceRequest { return oldObj.Exactly }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequest) *resourcev1beta2.ExactDeviceRequest { + return oldObj.Exactly + }) + errs = append(errs, fn(fldPath.Child("exactly"), obj.Exactly, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceRequest.FirstAvailable - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceSubRequest, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequest.FirstAvailable + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceSubRequest, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1119,32 +1642,49 @@ func Validate_DeviceRequest(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.DeviceSubRequest, b resourcev1beta2.DeviceSubRequest) bool { - return a.Name == b.Name - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.DeviceSubRequest, b resourcev1beta2.DeviceSubRequest) bool { + return a.Name == b.Name + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.DeviceSubRequest, b resourcev1beta2.DeviceSubRequest) bool { - return a.Name == b.Name - }, validate.SemanticDeepEqual, Validate_DeviceSubRequest)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.DeviceSubRequest, b resourcev1beta2.DeviceSubRequest) bool { + return a.Name == b.Name + }, validate.SemanticDeepEqual, Validate_DeviceSubRequest); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("firstAvailable"), obj.FirstAvailable, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequest) []resourcev1beta2.DeviceSubRequest { - return oldObj.FirstAvailable - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequest) []resourcev1beta2.DeviceSubRequest { + return oldObj.FirstAvailable + }) + errs = append(errs, fn(fldPath.Child("firstAvailable"), obj.FirstAvailable, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceRequestAllocationResult validates an instance of DeviceRequestAllocationResult according // to declarative validation rules in the API schema. -func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceRequestAllocationResult) (errs field.ErrorList) { +func Validate_DeviceRequestAllocationResult( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceRequestAllocationResult) (errs field.ErrorList) { + // field resourcev1beta2.DeviceRequestAllocationResult.Request has no validation - // field resourcev1beta2.DeviceRequestAllocationResult.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequestAllocationResult.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1155,17 +1695,31 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceRequestAllocationResult.Pool - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequestAllocationResult.Pool + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1176,19 +1730,31 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pool"), &obj.Pool, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) *string { return &oldObj.Pool }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) *string { + return &oldObj.Pool + }) + errs = append(errs, fn(fldPath.Child("pool"), &obj.Pool, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceRequestAllocationResult.Device has no validation // field resourcev1beta2.DeviceRequestAllocationResult.AdminAccess has no validation - // field resourcev1beta2.DeviceRequestAllocationResult.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequestAllocationResult.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1199,18 +1765,28 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) []resourcev1beta2.DeviceToleration { - return oldObj.Tolerations - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) []resourcev1beta2.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceRequestAllocationResult.BindingConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequestAllocationResult.BindingConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1225,14 +1801,24 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } return - }(fldPath.Child("bindingConditions"), obj.BindingConditions, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) []string { return oldObj.BindingConditions }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) []string { + return oldObj.BindingConditions + }) + errs = append(errs, fn(fldPath.Child("bindingConditions"), obj.BindingConditions, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceRequestAllocationResult.BindingFailureConditions - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequestAllocationResult.BindingFailureConditions + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1247,16 +1833,24 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op return // do not proceed } return - }(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) []string { - return oldObj.BindingFailureConditions - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) []string { + return oldObj.BindingFailureConditions + }) + errs = append(errs, fn(fldPath.Child("bindingFailureConditions"), obj.BindingFailureConditions, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceRequestAllocationResult.ShareID - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *types.UID, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceRequestAllocationResult.ShareID + fn := func( + fldPath *field.Path, + obj, oldObj *types.UID, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1266,9 +1860,17 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shareID"), obj.ShareID, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) *types.UID { return oldObj.ShareID }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceRequestAllocationResult) *types.UID { + return oldObj.ShareID + }) + errs = append(errs, fn(fldPath.Child("shareID"), obj.ShareID, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceRequestAllocationResult.ConsumedCapacity has no validation return errs @@ -1276,15 +1878,22 @@ func Validate_DeviceRequestAllocationResult(ctx context.Context, op operation.Op // Validate_DeviceSubRequest validates an instance of DeviceSubRequest according // to declarative validation rules in the API schema. -func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceSubRequest) (errs field.ErrorList) { +func Validate_DeviceSubRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceSubRequest) (errs field.ErrorList) { + // field resourcev1beta2.DeviceSubRequest.Name has no validation - // field resourcev1beta2.DeviceSubRequest.DeviceClassName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceSubRequest.DeviceClassName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1295,16 +1904,28 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("deviceClassName"), &obj.DeviceClassName, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceSubRequest) *string { return &oldObj.DeviceClassName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceSubRequest) *string { + return &oldObj.DeviceClassName + }) + errs = append(errs, fn(fldPath.Child("deviceClassName"), &obj.DeviceClassName, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceSubRequest.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceSubRequest.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1319,16 +1940,24 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceSubRequest) []resourcev1beta2.DeviceSelector { - return oldObj.Selectors - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceSubRequest) []resourcev1beta2.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceSubRequest.AllocationMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceAllocationMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceSubRequest.AllocationMode + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceAllocationMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1341,18 +1970,26 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceAllocationMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocationMode"), &obj.AllocationMode, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceSubRequest) *resourcev1beta2.DeviceAllocationMode { - return &oldObj.AllocationMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceSubRequest) *resourcev1beta2.DeviceAllocationMode { + return &oldObj.AllocationMode + }) + errs = append(errs, fn(fldPath.Child("allocationMode"), &obj.AllocationMode, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceSubRequest.Count has no validation - // field resourcev1beta2.DeviceSubRequest.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceSubRequest.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1363,11 +2000,17 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceSubRequest) []resourcev1beta2.DeviceToleration { - return oldObj.Tolerations - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceSubRequest) []resourcev1beta2.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceSubRequest.Capacity has no validation return errs @@ -1375,16 +2018,23 @@ func Validate_DeviceSubRequest(ctx context.Context, op operation.Operation, fldP // Validate_DeviceTaint validates an instance of DeviceTaint according // to declarative validation rules in the API schema. -func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaint) (errs field.ErrorList) { +func Validate_DeviceTaint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaint) (errs field.ErrorList) { + // field resourcev1beta2.DeviceTaint.Key has no validation // field resourcev1beta2.DeviceTaint.Value has no validation - // field resourcev1beta2.DeviceTaint.Effect - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaintEffect, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceTaint.Effect + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaintEffect, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1398,7 +2048,13 @@ func Validate_DeviceTaint(ctx context.Context, op operation.Operation, fldPath * // call the type's validation function errs = append(errs, Validate_DeviceTaintEffect(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("effect"), &obj.Effect, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceTaint) *resourcev1beta2.DeviceTaintEffect { return &oldObj.Effect }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceTaint) *resourcev1beta2.DeviceTaintEffect { + return &oldObj.Effect + }) + errs = append(errs, fn(fldPath.Child("effect"), &obj.Effect, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceTaint.TimeAdded has no validation return errs @@ -1408,31 +2064,47 @@ var symbolsForDeviceTaintEffect = sets.New(resourcev1beta2.DeviceTaintEffectNoEx // Validate_DeviceTaintEffect validates an instance of DeviceTaintEffect according // to declarative validation rules in the API schema. -func Validate_DeviceTaintEffect(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaintEffect) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil).MarkAlpha()...) +func Validate_DeviceTaintEffect( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaintEffect) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTaintEffect, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DeviceTaintRule validates an instance of DeviceTaintRule according // to declarative validation rules in the API schema. -func Validate_DeviceTaintRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaintRule) (errs field.ErrorList) { +func Validate_DeviceTaintRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaintRule) (errs field.ErrorList) { + // field resourcev1beta2.DeviceTaintRule.TypeMeta has no validation // field resourcev1beta2.DeviceTaintRule.ObjectMeta has no validation - // field resourcev1beta2.DeviceTaintRule.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaintRuleSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceTaintRule.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaintRuleSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceTaintRuleSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceTaintRule) *resourcev1beta2.DeviceTaintRuleSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceTaintRule) *resourcev1beta2.DeviceTaintRuleSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceTaintRule.Status has no validation return errs @@ -1440,33 +2112,53 @@ func Validate_DeviceTaintRule(ctx context.Context, op operation.Operation, fldPa // Validate_DeviceTaintRuleSpec validates an instance of DeviceTaintRuleSpec according // to declarative validation rules in the API schema. -func Validate_DeviceTaintRuleSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaintRuleSpec) (errs field.ErrorList) { +func Validate_DeviceTaintRuleSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaintRuleSpec) (errs field.ErrorList) { + // field resourcev1beta2.DeviceTaintRuleSpec.DeviceSelector has no validation - // field resourcev1beta2.DeviceTaintRuleSpec.Taint - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceTaintRuleSpec.Taint + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceTaint(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("taint"), &obj.Taint, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceTaintRuleSpec) *resourcev1beta2.DeviceTaint { return &oldObj.Taint }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceTaintRuleSpec) *resourcev1beta2.DeviceTaint { + return &oldObj.Taint + }) + errs = append(errs, fn(fldPath.Child("taint"), &obj.Taint, oldVal, oldObj != nil)...) + } return errs } // Validate_DeviceToleration validates an instance of DeviceToleration according // to declarative validation rules in the API schema. -func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceToleration) (errs field.ErrorList) { - // field resourcev1beta2.DeviceToleration.Key - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_DeviceToleration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceToleration) (errs field.ErrorList) { + + { // field resourcev1beta2.DeviceToleration.Key + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1476,16 +2168,28 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.LabelKey(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.LabelKey(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("key"), &obj.Key, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceToleration) *string { return &oldObj.Key }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceToleration) *string { + return &oldObj.Key + }) + errs = append(errs, fn(fldPath.Child("key"), &obj.Key, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.DeviceToleration.Operator - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTolerationOperator, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceToleration.Operator + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTolerationOperator, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1500,18 +2204,26 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceTolerationOperator(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("operator"), &obj.Operator, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceToleration) *resourcev1beta2.DeviceTolerationOperator { - return &oldObj.Operator - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceToleration) *resourcev1beta2.DeviceTolerationOperator { + return &oldObj.Operator + }) + errs = append(errs, fn(fldPath.Child("operator"), &obj.Operator, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceToleration.Value has no validation - // field resourcev1beta2.DeviceToleration.Effect - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTaintEffect, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.DeviceToleration.Effect + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTaintEffect, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1524,9 +2236,13 @@ func Validate_DeviceToleration(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DeviceTaintEffect(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("effect"), &obj.Effect, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceToleration) *resourcev1beta2.DeviceTaintEffect { - return &oldObj.Effect - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.DeviceToleration) *resourcev1beta2.DeviceTaintEffect { + return &oldObj.Effect + }) + errs = append(errs, fn(fldPath.Child("effect"), &obj.Effect, oldVal, oldObj != nil)...) + } // field resourcev1beta2.DeviceToleration.TolerationSeconds has no validation return errs @@ -1536,23 +2252,35 @@ var symbolsForDeviceTolerationOperator = sets.New(resourcev1beta2.DeviceTolerati // Validate_DeviceTolerationOperator validates an instance of DeviceTolerationOperator according // to declarative validation rules in the API schema. -func Validate_DeviceTolerationOperator(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceTolerationOperator) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTolerationOperator, nil).MarkAlpha()...) +func Validate_DeviceTolerationOperator( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceTolerationOperator) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDeviceTolerationOperator, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ExactDeviceRequest validates an instance of ExactDeviceRequest according // to declarative validation rules in the API schema. -func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ExactDeviceRequest) (errs field.ErrorList) { +func Validate_ExactDeviceRequest( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ExactDeviceRequest) (errs field.ErrorList) { + // field resourcev1beta2.ExactDeviceRequest.DeviceClassName has no validation - // field resourcev1beta2.ExactDeviceRequest.Selectors - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceSelector, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ExactDeviceRequest.Selectors + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceSelector, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1567,16 +2295,24 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl return // do not proceed } return - }(fldPath.Child("selectors"), obj.Selectors, safe.Field(oldObj, func(oldObj *resourcev1beta2.ExactDeviceRequest) []resourcev1beta2.DeviceSelector { - return oldObj.Selectors - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ExactDeviceRequest) []resourcev1beta2.DeviceSelector { + return oldObj.Selectors + }) + errs = append(errs, fn(fldPath.Child("selectors"), obj.Selectors, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.ExactDeviceRequest.AllocationMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceAllocationMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ExactDeviceRequest.AllocationMode + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceAllocationMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1589,19 +2325,27 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl // call the type's validation function errs = append(errs, Validate_DeviceAllocationMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocationMode"), &obj.AllocationMode, safe.Field(oldObj, func(oldObj *resourcev1beta2.ExactDeviceRequest) *resourcev1beta2.DeviceAllocationMode { - return &oldObj.AllocationMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ExactDeviceRequest) *resourcev1beta2.DeviceAllocationMode { + return &oldObj.AllocationMode + }) + errs = append(errs, fn(fldPath.Child("allocationMode"), &obj.AllocationMode, oldVal, oldObj != nil)...) + } // field resourcev1beta2.ExactDeviceRequest.Count has no validation // field resourcev1beta2.ExactDeviceRequest.AdminAccess has no validation - // field resourcev1beta2.ExactDeviceRequest.Tolerations - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.DeviceToleration, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ExactDeviceRequest.Tolerations + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.DeviceToleration, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1612,11 +2356,17 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_DeviceToleration); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tolerations"), obj.Tolerations, safe.Field(oldObj, func(oldObj *resourcev1beta2.ExactDeviceRequest) []resourcev1beta2.DeviceToleration { - return oldObj.Tolerations - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ExactDeviceRequest) []resourcev1beta2.DeviceToleration { + return oldObj.Tolerations + }) + errs = append(errs, fn(fldPath.Child("tolerations"), obj.Tolerations, oldVal, oldObj != nil)...) + } // field resourcev1beta2.ExactDeviceRequest.Capacity has no validation return errs @@ -1624,13 +2374,20 @@ func Validate_ExactDeviceRequest(ctx context.Context, op operation.Operation, fl // Validate_NetworkDeviceData validates an instance of NetworkDeviceData according // to declarative validation rules in the API schema. -func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.NetworkDeviceData) (errs field.ErrorList) { - // field resourcev1beta2.NetworkDeviceData.InterfaceName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_NetworkDeviceData( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.NetworkDeviceData) (errs field.ErrorList) { + + { // field resourcev1beta2.NetworkDeviceData.InterfaceName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1640,16 +2397,28 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256).MarkAlpha()...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 256).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("interfaceName"), &obj.InterfaceName, safe.Field(oldObj, func(oldObj *resourcev1beta2.NetworkDeviceData) *string { return &oldObj.InterfaceName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.NetworkDeviceData) *string { + return &oldObj.InterfaceName + }) + errs = append(errs, fn(fldPath.Child("interfaceName"), &obj.InterfaceName, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.NetworkDeviceData.IPs - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.NetworkDeviceData.IPs + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1664,16 +2433,28 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ips"), obj.IPs, safe.Field(oldObj, func(oldObj *resourcev1beta2.NetworkDeviceData) []string { return oldObj.IPs }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.NetworkDeviceData) []string { + return oldObj.IPs + }) + errs = append(errs, fn(fldPath.Child("ips"), obj.IPs, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.NetworkDeviceData.HardwareAddress - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.NetworkDeviceData.HardwareAddress + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1683,22 +2464,37 @@ func Validate_NetworkDeviceData(ctx context.Context, op operation.Operation, fld if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 128).MarkAlpha()...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 128).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("hardwareAddress"), &obj.HardwareAddress, safe.Field(oldObj, func(oldObj *resourcev1beta2.NetworkDeviceData) *string { return &oldObj.HardwareAddress }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.NetworkDeviceData) *string { + return &oldObj.HardwareAddress + }) + errs = append(errs, fn(fldPath.Child("hardwareAddress"), &obj.HardwareAddress, oldVal, oldObj != nil)...) + } return errs } // Validate_OpaqueDeviceConfiguration validates an instance of OpaqueDeviceConfiguration according // to declarative validation rules in the API schema. -func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.OpaqueDeviceConfiguration) (errs field.ErrorList) { - // field resourcev1beta2.OpaqueDeviceConfiguration.Driver - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_OpaqueDeviceConfiguration( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.OpaqueDeviceConfiguration) (errs field.ErrorList) { + + { // field resourcev1beta2.OpaqueDeviceConfiguration.Driver + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1709,10 +2505,20 @@ func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operat if earlyReturn { return // do not proceed } - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("driver"), &obj.Driver, safe.Field(oldObj, func(oldObj *resourcev1beta2.OpaqueDeviceConfiguration) *string { return &oldObj.Driver }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.OpaqueDeviceConfiguration) *string { + return &oldObj.Driver + }) + errs = append(errs, fn(fldPath.Child("driver"), &obj.Driver, oldVal, oldObj != nil)...) + } // field resourcev1beta2.OpaqueDeviceConfiguration.Parameters has no validation return errs @@ -1720,16 +2526,23 @@ func Validate_OpaqueDeviceConfiguration(ctx context.Context, op operation.Operat // Validate_ResourceClaim validates an instance of ResourceClaim according // to declarative validation rules in the API schema. -func Validate_ResourceClaim(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaim) (errs field.ErrorList) { +func Validate_ResourceClaim( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaim) (errs field.ErrorList) { + // field resourcev1beta2.ResourceClaim.TypeMeta has no validation // field resourcev1beta2.ResourceClaim.ObjectMeta has no validation - // field resourcev1beta2.ResourceClaim.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceClaim.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1743,52 +2556,86 @@ func Validate_ResourceClaim(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_ResourceClaimSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaim) *resourcev1beta2.ResourceClaimSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaim) *resourcev1beta2.ResourceClaimSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.ResourceClaim.Status - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceClaim.Status + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimStatus(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("status"), &obj.Status, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaim) *resourcev1beta2.ResourceClaimStatus { - return &oldObj.Status - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaim) *resourcev1beta2.ResourceClaimStatus { + return &oldObj.Status + }) + errs = append(errs, fn(fldPath.Child("status"), &obj.Status, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimSpec validates an instance of ResourceClaimSpec according // to declarative validation rules in the API schema. -func Validate_ResourceClaimSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimSpec) (errs field.ErrorList) { - // field resourcev1beta2.ResourceClaimSpec.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.DeviceClaim, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourceClaimSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimSpec) (errs field.ErrorList) { + + { // field resourcev1beta2.ResourceClaimSpec.Devices + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.DeviceClaim, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DeviceClaim(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("devices"), &obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaimSpec) *resourcev1beta2.DeviceClaim { return &oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaimSpec) *resourcev1beta2.DeviceClaim { + return &oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), &obj.Devices, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimStatus validates an instance of ResourceClaimStatus according // to declarative validation rules in the API schema. -func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimStatus) (errs field.ErrorList) { - // field resourcev1beta2.ResourceClaimStatus.Allocation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.AllocationResult, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ResourceClaimStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimStatus) (errs field.ErrorList) { + + { // field resourcev1beta2.ResourceClaimStatus.Allocation + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.AllocationResult, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1805,16 +2652,24 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f // call the type's validation function errs = append(errs, Validate_AllocationResult(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("allocation"), obj.Allocation, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaimStatus) *resourcev1beta2.AllocationResult { - return oldObj.Allocation - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaimStatus) *resourcev1beta2.AllocationResult { + return oldObj.Allocation + }) + errs = append(errs, fn(fldPath.Child("allocation"), obj.Allocation, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.ResourceClaimStatus.ReservedFor - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.ResourceClaimConsumerReference, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceClaimStatus.ReservedFor + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.ResourceClaimConsumerReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1829,20 +2684,31 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.ResourceClaimConsumerReference, b resourcev1beta2.ResourceClaimConsumerReference) bool { - return a.UID == b.UID - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.ResourceClaimConsumerReference, b resourcev1beta2.ResourceClaimConsumerReference) bool { + return a.UID == b.UID + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("reservedFor"), obj.ReservedFor, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaimStatus) []resourcev1beta2.ResourceClaimConsumerReference { - return oldObj.ReservedFor - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaimStatus) []resourcev1beta2.ResourceClaimConsumerReference { + return oldObj.ReservedFor + }) + errs = append(errs, fn(fldPath.Child("reservedFor"), obj.ReservedFor, oldVal, oldObj != nil)...) + } - // field resourcev1beta2.ResourceClaimStatus.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.AllocatedDeviceStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceClaimStatus.Devices + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.AllocatedDeviceStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1853,102 +2719,154 @@ func Validate_ResourceClaimStatus(ctx context.Context, op operation.Operation, f return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.AllocatedDeviceStatus, b resourcev1beta2.AllocatedDeviceStatus) bool { - return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.AllocatedDeviceStatus, b resourcev1beta2.AllocatedDeviceStatus) bool { + return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.AllocatedDeviceStatus, b resourcev1beta2.AllocatedDeviceStatus) bool { - return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) - }, validate.SemanticDeepEqual, Validate_AllocatedDeviceStatus)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.AllocatedDeviceStatus, b resourcev1beta2.AllocatedDeviceStatus) bool { + return a.Driver == b.Driver && a.Device == b.Device && a.Pool == b.Pool && ((a.ShareID == nil && b.ShareID == nil) || (a.ShareID != nil && b.ShareID != nil && *a.ShareID == *b.ShareID)) + }, validate.SemanticDeepEqual, Validate_AllocatedDeviceStatus); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("devices"), obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaimStatus) []resourcev1beta2.AllocatedDeviceStatus { - return oldObj.Devices - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaimStatus) []resourcev1beta2.AllocatedDeviceStatus { + return oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), obj.Devices, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimTemplate validates an instance of ResourceClaimTemplate according // to declarative validation rules in the API schema. -func Validate_ResourceClaimTemplate(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimTemplate) (errs field.ErrorList) { +func Validate_ResourceClaimTemplate( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimTemplate) (errs field.ErrorList) { + // field resourcev1beta2.ResourceClaimTemplate.TypeMeta has no validation // field resourcev1beta2.ResourceClaimTemplate.ObjectMeta has no validation - // field resourcev1beta2.ResourceClaimTemplate.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimTemplateSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceClaimTemplate.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimTemplateSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimTemplateSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaimTemplate) *resourcev1beta2.ResourceClaimTemplateSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaimTemplate) *resourcev1beta2.ResourceClaimTemplateSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceClaimTemplateSpec validates an instance of ResourceClaimTemplateSpec according // to declarative validation rules in the API schema. -func Validate_ResourceClaimTemplateSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimTemplateSpec) (errs field.ErrorList) { +func Validate_ResourceClaimTemplateSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimTemplateSpec) (errs field.ErrorList) { + // field resourcev1beta2.ResourceClaimTemplateSpec.ObjectMeta has no validation - // field resourcev1beta2.ResourceClaimTemplateSpec.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceClaimSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceClaimTemplateSpec.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceClaimSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceClaimSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceClaimTemplateSpec) *resourcev1beta2.ResourceClaimSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceClaimTemplateSpec) *resourcev1beta2.ResourceClaimSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceSlice validates an instance of ResourceSlice according // to declarative validation rules in the API schema. -func Validate_ResourceSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceSlice) (errs field.ErrorList) { +func Validate_ResourceSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceSlice) (errs field.ErrorList) { + // field resourcev1beta2.ResourceSlice.TypeMeta has no validation // field resourcev1beta2.ResourceSlice.ObjectMeta has no validation - // field resourcev1beta2.ResourceSlice.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceSliceSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceSlice.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceSliceSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourceSliceSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceSlice) *resourcev1beta2.ResourceSliceSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceSlice) *resourcev1beta2.ResourceSliceSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_ResourceSliceSpec validates an instance of ResourceSliceSpec according // to declarative validation rules in the API schema. -func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *resourcev1beta2.ResourceSliceSpec) (errs field.ErrorList) { +func Validate_ResourceSliceSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *resourcev1beta2.ResourceSliceSpec) (errs field.ErrorList) { + // field resourcev1beta2.ResourceSliceSpec.Driver has no validation // field resourcev1beta2.ResourceSliceSpec.Pool has no validation // field resourcev1beta2.ResourceSliceSpec.NodeName has no validation // field resourcev1beta2.ResourceSliceSpec.NodeSelector has no validation // field resourcev1beta2.ResourceSliceSpec.AllNodes has no validation - // field resourcev1beta2.ResourceSliceSpec.Devices - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.Device, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceSliceSpec.Devices + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.Device, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1959,18 +2877,30 @@ func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Device)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_Device); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("devices"), obj.Devices, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceSliceSpec) []resourcev1beta2.Device { return oldObj.Devices }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceSliceSpec) []resourcev1beta2.Device { + return oldObj.Devices + }) + errs = append(errs, fn(fldPath.Child("devices"), obj.Devices, oldVal, oldObj != nil)...) + } // field resourcev1beta2.ResourceSliceSpec.PerDeviceNodeSelection has no validation - // field resourcev1beta2.ResourceSliceSpec.SharedCounters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []resourcev1beta2.CounterSet, oldValueCorrelated bool) (errs field.ErrorList) { + { // field resourcev1beta2.ResourceSliceSpec.SharedCounters + fn := func( + fldPath *field.Path, + obj, oldObj []resourcev1beta2.CounterSet, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1985,13 +2915,23 @@ func Validate_ResourceSliceSpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.CounterSet, b resourcev1beta2.CounterSet) bool { return a.Name == b.Name }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.CounterSet, b resourcev1beta2.CounterSet) bool { return a.Name == b.Name }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a resourcev1beta2.CounterSet, b resourcev1beta2.CounterSet) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_CounterSet)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a resourcev1beta2.CounterSet, b resourcev1beta2.CounterSet) bool { return a.Name == b.Name }, validate.SemanticDeepEqual, Validate_CounterSet); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sharedCounters"), obj.SharedCounters, safe.Field(oldObj, func(oldObj *resourcev1beta2.ResourceSliceSpec) []resourcev1beta2.CounterSet { - return oldObj.SharedCounters - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *resourcev1beta2.ResourceSliceSpec) []resourcev1beta2.CounterSet { + return oldObj.SharedCounters + }) + errs = append(errs, fn(fldPath.Child("sharedCounters"), obj.SharedCounters, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/scheduling/v1alpha2/zz_generated.validations.go b/pkg/apis/scheduling/v1alpha2/zz_generated.validations.go index e93231a5d44..1159ad1a61a 100644 --- a/pkg/apis/scheduling/v1alpha2/zz_generated.validations.go +++ b/pkg/apis/scheduling/v1alpha2/zz_generated.validations.go @@ -41,21 +41,35 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type PodGroup - scheme.AddValidationFunc((*schedulingv1alpha2.PodGroup)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_PodGroup(ctx, op, nil /* fldPath */, obj.(*schedulingv1alpha2.PodGroup), safe.Cast[*schedulingv1alpha2.PodGroup](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*schedulingv1alpha2.PodGroup)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_PodGroup( + ctx, op, nil, /* fldPath */ + obj.(*schedulingv1alpha2.PodGroup), + safe.Cast[*schedulingv1alpha2.PodGroup](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Workload - scheme.AddValidationFunc((*schedulingv1alpha2.Workload)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Workload(ctx, op, nil /* fldPath */, obj.(*schedulingv1alpha2.Workload), safe.Cast[*schedulingv1alpha2.Workload](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*schedulingv1alpha2.Workload)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Workload( + ctx, op, nil, /* fldPath */ + obj.(*schedulingv1alpha2.Workload), + safe.Cast[*schedulingv1alpha2.Workload](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -63,21 +77,33 @@ var symbolsForDisruptionMode = sets.New(schedulingv1alpha2.DisruptionModePod, sc // Validate_DisruptionMode validates an instance of DisruptionMode according // to declarative validation rules in the API schema. -func Validate_DisruptionMode(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.DisruptionMode) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDisruptionMode, nil)...) +func Validate_DisruptionMode( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.DisruptionMode) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForDisruptionMode, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_GangSchedulingPolicy validates an instance of GangSchedulingPolicy according // to declarative validation rules in the API schema. -func Validate_GangSchedulingPolicy(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.GangSchedulingPolicy) (errs field.ErrorList) { - // field schedulingv1alpha2.GangSchedulingPolicy.MinCount - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_GangSchedulingPolicy( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.GangSchedulingPolicy) (errs field.ErrorList) { + + { // field schedulingv1alpha2.GangSchedulingPolicy.MinCount + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -88,42 +114,73 @@ func Validate_GangSchedulingPolicy(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("minCount"), &obj.MinCount, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.GangSchedulingPolicy) *int32 { return &oldObj.MinCount }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.GangSchedulingPolicy) *int32 { + return &oldObj.MinCount + }) + errs = append(errs, fn(fldPath.Child("minCount"), &obj.MinCount, oldVal, oldObj != nil)...) + } return errs } // Validate_PodGroup validates an instance of PodGroup according // to declarative validation rules in the API schema. -func Validate_PodGroup(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroup) (errs field.ErrorList) { +func Validate_PodGroup( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroup) (errs field.ErrorList) { + // field schedulingv1alpha2.PodGroup.TypeMeta has no validation // field schedulingv1alpha2.PodGroup.ObjectMeta has no validation - // field schedulingv1alpha2.PodGroup.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroup.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_PodGroupSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroup) *schedulingv1alpha2.PodGroupSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroup) *schedulingv1alpha2.PodGroupSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroup.Status - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroup.Status + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_PodGroupStatus(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("status"), &obj.Status, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroup) *schedulingv1alpha2.PodGroupStatus { return &oldObj.Status }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroup) *schedulingv1alpha2.PodGroupStatus { + return &oldObj.Status + }) + errs = append(errs, fn(fldPath.Child("status"), &obj.Status, oldVal, oldObj != nil)...) + } return errs } @@ -132,25 +189,36 @@ var unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupResourceClaim_ = v // Validate_PodGroupResourceClaim validates an instance of PodGroupResourceClaim according // to declarative validation rules in the API schema. -func Validate_PodGroupResourceClaim(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupResourceClaim) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupResourceClaim_, func(obj *schedulingv1alpha2.PodGroupResourceClaim) bool { - if obj == nil { - return false - } - return obj.ResourceClaimName != nil - }, func(obj *schedulingv1alpha2.PodGroupResourceClaim) bool { - if obj == nil { - return false - } - return obj.ResourceClaimTemplateName != nil - })...) +func Validate_PodGroupResourceClaim( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupResourceClaim) (errs field.ErrorList) { - // field schedulingv1alpha2.PodGroupResourceClaim.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupResourceClaim_, + func(obj *schedulingv1alpha2.PodGroupResourceClaim) bool { + if obj == nil { + return false + } + return obj.ResourceClaimName != nil + }, + func(obj *schedulingv1alpha2.PodGroupResourceClaim) bool { + if obj == nil { + return false + } + return obj.ResourceClaimTemplateName != nil + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field schedulingv1alpha2.PodGroupResourceClaim.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -161,16 +229,28 @@ func Validate_PodGroupResourceClaim(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupResourceClaim) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupResourceClaim) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupResourceClaim.ResourceClaimName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupResourceClaim.ResourceClaimName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -180,16 +260,28 @@ func Validate_PodGroupResourceClaim(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourceClaimName"), obj.ResourceClaimName, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupResourceClaim) *string { return oldObj.ResourceClaimName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupResourceClaim) *string { + return oldObj.ResourceClaimName + }) + errs = append(errs, fn(fldPath.Child("resourceClaimName"), obj.ResourceClaimName, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupResourceClaim.ResourceClaimTemplateName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupResourceClaim.ResourceClaimTemplateName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -199,26 +291,39 @@ func Validate_PodGroupResourceClaim(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourceClaimTemplateName"), obj.ResourceClaimTemplateName, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupResourceClaim) *string { - return oldObj.ResourceClaimTemplateName - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupResourceClaim) *string { + return oldObj.ResourceClaimTemplateName + }) + errs = append(errs, fn(fldPath.Child("resourceClaimTemplateName"), obj.ResourceClaimTemplateName, oldVal, oldObj != nil)...) + } return errs } // Validate_PodGroupResourceClaimStatus validates an instance of PodGroupResourceClaimStatus according // to declarative validation rules in the API schema. -func Validate_PodGroupResourceClaimStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupResourceClaimStatus) (errs field.ErrorList) { +func Validate_PodGroupResourceClaimStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupResourceClaimStatus) (errs field.ErrorList) { + // field schedulingv1alpha2.PodGroupResourceClaimStatus.Name has no validation - // field schedulingv1alpha2.PodGroupResourceClaimStatus.ResourceClaimName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupResourceClaimStatus.ResourceClaimName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -228,22 +333,37 @@ func Validate_PodGroupResourceClaimStatus(ctx context.Context, op operation.Oper if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourceClaimName"), obj.ResourceClaimName, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupResourceClaimStatus) *string { return oldObj.ResourceClaimName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupResourceClaimStatus) *string { + return oldObj.ResourceClaimName + }) + errs = append(errs, fn(fldPath.Child("resourceClaimName"), obj.ResourceClaimName, oldVal, oldObj != nil)...) + } return errs } // Validate_PodGroupSchedulingConstraints validates an instance of PodGroupSchedulingConstraints according // to declarative validation rules in the API schema. -func Validate_PodGroupSchedulingConstraints(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints) (errs field.ErrorList) { - // field schedulingv1alpha2.PodGroupSchedulingConstraints.Topology - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []schedulingv1alpha2.TopologyConstraint, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_PodGroupSchedulingConstraints( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints) (errs field.ErrorList) { + + { // field schedulingv1alpha2.PodGroupSchedulingConstraints.Topology + fn := func( + fldPath *field.Path, + obj, oldObj []schedulingv1alpha2.TopologyConstraint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -258,11 +378,17 @@ func Validate_PodGroupSchedulingConstraints(ctx context.Context, op operation.Op return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_TopologyConstraint)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_TopologyConstraint); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("topology"), obj.Topology, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints) []schedulingv1alpha2.TopologyConstraint { - return oldObj.Topology - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints) []schedulingv1alpha2.TopologyConstraint { + return oldObj.Topology + }) + errs = append(errs, fn(fldPath.Child("topology"), obj.Topology, oldVal, oldObj != nil)...) + } return errs } @@ -271,25 +397,36 @@ var unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupSchedulingPolicy_ // Validate_PodGroupSchedulingPolicy validates an instance of PodGroupSchedulingPolicy according // to declarative validation rules in the API schema. -func Validate_PodGroupSchedulingPolicy(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupSchedulingPolicy_, func(obj *schedulingv1alpha2.PodGroupSchedulingPolicy) bool { - if obj == nil { - return false - } - return obj.Basic != nil - }, func(obj *schedulingv1alpha2.PodGroupSchedulingPolicy) bool { - if obj == nil { - return false - } - return obj.Gang != nil - })...) +func Validate_PodGroupSchedulingPolicy( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy) (errs field.ErrorList) { - // field schedulingv1alpha2.PodGroupSchedulingPolicy.Basic - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.BasicSchedulingPolicy, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupSchedulingPolicy_, + func(obj *schedulingv1alpha2.PodGroupSchedulingPolicy) bool { + if obj == nil { + return false + } + return obj.Basic != nil + }, + func(obj *schedulingv1alpha2.PodGroupSchedulingPolicy) bool { + if obj == nil { + return false + } + return obj.Gang != nil + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field schedulingv1alpha2.PodGroupSchedulingPolicy.Basic + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.BasicSchedulingPolicy, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -300,16 +437,24 @@ func Validate_PodGroupSchedulingPolicy(ctx context.Context, op operation.Operati return // do not proceed } return - }(fldPath.Child("basic"), obj.Basic, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy) *schedulingv1alpha2.BasicSchedulingPolicy { - return oldObj.Basic - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy) *schedulingv1alpha2.BasicSchedulingPolicy { + return oldObj.Basic + }) + errs = append(errs, fn(fldPath.Child("basic"), obj.Basic, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupSchedulingPolicy.Gang - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.GangSchedulingPolicy, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupSchedulingPolicy.Gang + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.GangSchedulingPolicy, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -322,22 +467,33 @@ func Validate_PodGroupSchedulingPolicy(ctx context.Context, op operation.Operati // call the type's validation function errs = append(errs, Validate_GangSchedulingPolicy(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("gang"), obj.Gang, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy) *schedulingv1alpha2.GangSchedulingPolicy { - return oldObj.Gang - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy) *schedulingv1alpha2.GangSchedulingPolicy { + return oldObj.Gang + }) + errs = append(errs, fn(fldPath.Child("gang"), obj.Gang, oldVal, oldObj != nil)...) + } return errs } // Validate_PodGroupSpec validates an instance of PodGroupSpec according // to declarative validation rules in the API schema. -func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSpec) (errs field.ErrorList) { - // field schedulingv1alpha2.PodGroupSpec.PodGroupTemplateRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupTemplateReference, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_PodGroupSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSpec) (errs field.ErrorList) { + + { // field schedulingv1alpha2.PodGroupSpec.PodGroupTemplateRef + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupTemplateReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -354,16 +510,24 @@ func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_PodGroupTemplateReference(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("podGroupTemplateRef"), obj.PodGroupTemplateRef, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.PodGroupTemplateReference { - return oldObj.PodGroupTemplateRef - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.PodGroupTemplateReference { + return oldObj.PodGroupTemplateRef + }) + errs = append(errs, fn(fldPath.Child("podGroupTemplateRef"), obj.PodGroupTemplateRef, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupSpec.SchedulingPolicy - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupSpec.SchedulingPolicy + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -377,16 +541,24 @@ func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_PodGroupSchedulingPolicy(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("schedulingPolicy"), &obj.SchedulingPolicy, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.PodGroupSchedulingPolicy { - return &oldObj.SchedulingPolicy - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.PodGroupSchedulingPolicy { + return &oldObj.SchedulingPolicy + }) + errs = append(errs, fn(fldPath.Child("schedulingPolicy"), &obj.SchedulingPolicy, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupSpec.SchedulingConstraints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupSpec.SchedulingConstraints + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -410,16 +582,24 @@ func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_PodGroupSchedulingConstraints(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("schedulingConstraints"), obj.SchedulingConstraints, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.PodGroupSchedulingConstraints { - return oldObj.SchedulingConstraints - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.PodGroupSchedulingConstraints { + return oldObj.SchedulingConstraints + }) + errs = append(errs, fn(fldPath.Child("schedulingConstraints"), obj.SchedulingConstraints, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupSpec.ResourceClaims - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []schedulingv1alpha2.PodGroupResourceClaim, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupSpec.ResourceClaims + fn := func( + fldPath *field.Path, + obj, oldObj []schedulingv1alpha2.PodGroupResourceClaim, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -438,24 +618,38 @@ func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { - return a.Name == b.Name - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { + return a.Name == b.Name + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { - return a.Name == b.Name - }, validate.SemanticDeepEqual, Validate_PodGroupResourceClaim)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { + return a.Name == b.Name + }, validate.SemanticDeepEqual, Validate_PodGroupResourceClaim); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourceClaims"), obj.ResourceClaims, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSpec) []schedulingv1alpha2.PodGroupResourceClaim { - return oldObj.ResourceClaims - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSpec) []schedulingv1alpha2.PodGroupResourceClaim { + return oldObj.ResourceClaims + }) + errs = append(errs, fn(fldPath.Child("resourceClaims"), obj.ResourceClaims, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupSpec.DisruptionMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.DisruptionMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupSpec.DisruptionMode + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.DisruptionMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -481,16 +675,24 @@ func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_DisruptionMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("disruptionMode"), obj.DisruptionMode, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.DisruptionMode { - return oldObj.DisruptionMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSpec) *schedulingv1alpha2.DisruptionMode { + return oldObj.DisruptionMode + }) + errs = append(errs, fn(fldPath.Child("disruptionMode"), obj.DisruptionMode, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupSpec.PriorityClassName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupSpec.PriorityClassName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -511,16 +713,28 @@ func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath if earlyReturn { return // do not proceed } - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, validate.LongName)...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, validate.LongName); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("priorityClassName"), &obj.PriorityClassName, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSpec) *string { return &oldObj.PriorityClassName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSpec) *string { + return &oldObj.PriorityClassName + }) + errs = append(errs, fn(fldPath.Child("priorityClassName"), &obj.PriorityClassName, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupSpec.Priority - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupSpec.Priority + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -541,29 +755,48 @@ func Validate_PodGroupSpec(ctx context.Context, op operation.Operation, fldPath if earlyReturn { return // do not proceed } - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Maximum(ctx, op, fldPath, obj, oldObj, 1000000000) - })...) - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, -2147483648) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Maximum(ctx, op, fldPath, obj, oldObj, 1000000000) + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, -2147483648) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("priority"), obj.Priority, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupSpec) *int32 { return oldObj.Priority }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupSpec) *int32 { + return oldObj.Priority + }) + errs = append(errs, fn(fldPath.Child("priority"), obj.Priority, oldVal, oldObj != nil)...) + } return errs } // Validate_PodGroupStatus validates an instance of PodGroupStatus according // to declarative validation rules in the API schema. -func Validate_PodGroupStatus(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupStatus) (errs field.ErrorList) { +func Validate_PodGroupStatus( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupStatus) (errs field.ErrorList) { + // field schedulingv1alpha2.PodGroupStatus.Conditions has no validation - // field schedulingv1alpha2.PodGroupStatus.ResourceClaimStatuses - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []schedulingv1alpha2.PodGroupResourceClaimStatus, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupStatus.ResourceClaimStatuses + fn := func( + fldPath *field.Path, + obj, oldObj []schedulingv1alpha2.PodGroupResourceClaimStatus, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -578,30 +811,47 @@ func Validate_PodGroupStatus(ctx context.Context, op operation.Operation, fldPat return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupResourceClaimStatus, b schedulingv1alpha2.PodGroupResourceClaimStatus) bool { - return a.Name == b.Name - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupResourceClaimStatus, b schedulingv1alpha2.PodGroupResourceClaimStatus) bool { + return a.Name == b.Name + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupResourceClaimStatus, b schedulingv1alpha2.PodGroupResourceClaimStatus) bool { - return a.Name == b.Name - }, validate.SemanticDeepEqual, Validate_PodGroupResourceClaimStatus)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupResourceClaimStatus, b schedulingv1alpha2.PodGroupResourceClaimStatus) bool { + return a.Name == b.Name + }, validate.SemanticDeepEqual, Validate_PodGroupResourceClaimStatus); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourceClaimStatuses"), obj.ResourceClaimStatuses, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupStatus) []schedulingv1alpha2.PodGroupResourceClaimStatus { - return oldObj.ResourceClaimStatuses - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupStatus) []schedulingv1alpha2.PodGroupResourceClaimStatus { + return oldObj.ResourceClaimStatuses + }) + errs = append(errs, fn(fldPath.Child("resourceClaimStatuses"), obj.ResourceClaimStatuses, oldVal, oldObj != nil)...) + } return errs } // Validate_PodGroupTemplate validates an instance of PodGroupTemplate according // to declarative validation rules in the API schema. -func Validate_PodGroupTemplate(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupTemplate) (errs field.ErrorList) { - // field schedulingv1alpha2.PodGroupTemplate.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_PodGroupTemplate( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupTemplate) (errs field.ErrorList) { + + { // field schedulingv1alpha2.PodGroupTemplate.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -612,30 +862,50 @@ func Validate_PodGroupTemplate(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplate) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplate) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupTemplate.SchedulingPolicy - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupTemplate.SchedulingPolicy + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSchedulingPolicy, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_PodGroupSchedulingPolicy(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("schedulingPolicy"), &obj.SchedulingPolicy, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplate) *schedulingv1alpha2.PodGroupSchedulingPolicy { - return &oldObj.SchedulingPolicy - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplate) *schedulingv1alpha2.PodGroupSchedulingPolicy { + return &oldObj.SchedulingPolicy + }) + errs = append(errs, fn(fldPath.Child("schedulingPolicy"), &obj.SchedulingPolicy, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupTemplate.SchedulingConstraints - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupTemplate.SchedulingConstraints + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupSchedulingConstraints, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -655,16 +925,24 @@ func Validate_PodGroupTemplate(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_PodGroupSchedulingConstraints(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("schedulingConstraints"), obj.SchedulingConstraints, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplate) *schedulingv1alpha2.PodGroupSchedulingConstraints { - return oldObj.SchedulingConstraints - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplate) *schedulingv1alpha2.PodGroupSchedulingConstraints { + return oldObj.SchedulingConstraints + }) + errs = append(errs, fn(fldPath.Child("schedulingConstraints"), obj.SchedulingConstraints, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupTemplate.ResourceClaims - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []schedulingv1alpha2.PodGroupResourceClaim, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupTemplate.ResourceClaims + fn := func( + fldPath *field.Path, + obj, oldObj []schedulingv1alpha2.PodGroupResourceClaim, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -683,24 +961,38 @@ func Validate_PodGroupTemplate(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { - return a.Name == b.Name - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { + return a.Name == b.Name + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { - return a.Name == b.Name - }, validate.SemanticDeepEqual, Validate_PodGroupResourceClaim)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupResourceClaim, b schedulingv1alpha2.PodGroupResourceClaim) bool { + return a.Name == b.Name + }, validate.SemanticDeepEqual, Validate_PodGroupResourceClaim); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourceClaims"), obj.ResourceClaims, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplate) []schedulingv1alpha2.PodGroupResourceClaim { - return oldObj.ResourceClaims - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplate) []schedulingv1alpha2.PodGroupResourceClaim { + return oldObj.ResourceClaims + }) + errs = append(errs, fn(fldPath.Child("resourceClaims"), obj.ResourceClaims, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupTemplate.DisruptionMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.DisruptionMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupTemplate.DisruptionMode + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.DisruptionMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -720,16 +1012,24 @@ func Validate_PodGroupTemplate(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_DisruptionMode(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("disruptionMode"), obj.DisruptionMode, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplate) *schedulingv1alpha2.DisruptionMode { - return oldObj.DisruptionMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplate) *schedulingv1alpha2.DisruptionMode { + return oldObj.DisruptionMode + }) + errs = append(errs, fn(fldPath.Child("disruptionMode"), obj.DisruptionMode, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupTemplate.PriorityClassName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupTemplate.PriorityClassName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -746,16 +1046,28 @@ func Validate_PodGroupTemplate(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, validate.LongName)...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, validate.LongName); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("priorityClassName"), &obj.PriorityClassName, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplate) *string { return &oldObj.PriorityClassName }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplate) *string { + return &oldObj.PriorityClassName + }) + errs = append(errs, fn(fldPath.Child("priorityClassName"), &obj.PriorityClassName, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.PodGroupTemplate.Priority - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.PodGroupTemplate.Priority + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -772,14 +1084,26 @@ func Validate_PodGroupTemplate(ctx context.Context, op operation.Operation, fldP if earlyReturn { return // do not proceed } - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Maximum(ctx, op, fldPath, obj, oldObj, 1000000000) - })...) - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, -2147483648) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Maximum(ctx, op, fldPath, obj, oldObj, 1000000000) + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "WorkloadAwarePreemption", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int32) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, -2147483648) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("priority"), obj.Priority, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplate) *int32 { return oldObj.Priority }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplate) *int32 { + return oldObj.Priority + }) + errs = append(errs, fn(fldPath.Child("priority"), obj.Priority, oldVal, oldObj != nil)...) + } return errs } @@ -788,20 +1112,30 @@ var unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupTemplateReference_ // Validate_PodGroupTemplateReference validates an instance of PodGroupTemplateReference according // to declarative validation rules in the API schema. -func Validate_PodGroupTemplateReference(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.PodGroupTemplateReference) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupTemplateReference_, func(obj *schedulingv1alpha2.PodGroupTemplateReference) bool { - if obj == nil { - return false - } - return obj.Workload != nil - })...) +func Validate_PodGroupTemplateReference( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.PodGroupTemplateReference) (errs field.ErrorList) { - // field schedulingv1alpha2.PodGroupTemplateReference.Workload - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_scheduling_v1alpha2_PodGroupTemplateReference_, + func(obj *schedulingv1alpha2.PodGroupTemplateReference) bool { + if obj == nil { + return false + } + return obj.Workload != nil + }); len(e) != 0 { + errs = append(errs, e...) + } + + { // field schedulingv1alpha2.PodGroupTemplateReference.Workload + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -814,22 +1148,33 @@ func Validate_PodGroupTemplateReference(ctx context.Context, op operation.Operat // call the type's validation function errs = append(errs, Validate_WorkloadPodGroupTemplateReference(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("workload"), obj.Workload, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.PodGroupTemplateReference) *schedulingv1alpha2.WorkloadPodGroupTemplateReference { - return oldObj.Workload - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.PodGroupTemplateReference) *schedulingv1alpha2.WorkloadPodGroupTemplateReference { + return oldObj.Workload + }) + errs = append(errs, fn(fldPath.Child("workload"), obj.Workload, oldVal, oldObj != nil)...) + } return errs } // Validate_TopologyConstraint validates an instance of TopologyConstraint according // to declarative validation rules in the API schema. -func Validate_TopologyConstraint(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.TopologyConstraint) (errs field.ErrorList) { - // field schedulingv1alpha2.TopologyConstraint.Key - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_TopologyConstraint( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.TopologyConstraint) (errs field.ErrorList) { + + { // field schedulingv1alpha2.TopologyConstraint.Key + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -840,22 +1185,37 @@ func Validate_TopologyConstraint(ctx context.Context, op operation.Operation, fl if earlyReturn { return // do not proceed } - errs = append(errs, validate.LabelKey(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LabelKey(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("key"), &obj.Key, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.TopologyConstraint) *string { return &oldObj.Key }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.TopologyConstraint) *string { + return &oldObj.Key + }) + errs = append(errs, fn(fldPath.Child("key"), &obj.Key, oldVal, oldObj != nil)...) + } return errs } // Validate_TypedLocalObjectReference validates an instance of TypedLocalObjectReference according // to declarative validation rules in the API schema. -func Validate_TypedLocalObjectReference(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.TypedLocalObjectReference) (errs field.ErrorList) { - // field schedulingv1alpha2.TypedLocalObjectReference.APIGroup - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_TypedLocalObjectReference( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.TypedLocalObjectReference) (errs field.ErrorList) { + + { // field schedulingv1alpha2.TypedLocalObjectReference.APIGroup + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -865,16 +1225,28 @@ func Validate_TypedLocalObjectReference(ctx context.Context, op operation.Operat if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("apiGroup"), &obj.APIGroup, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.TypedLocalObjectReference) *string { return &oldObj.APIGroup }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.TypedLocalObjectReference) *string { + return &oldObj.APIGroup + }) + errs = append(errs, fn(fldPath.Child("apiGroup"), &obj.APIGroup, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.TypedLocalObjectReference.Kind - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.TypedLocalObjectReference.Kind + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -885,16 +1257,28 @@ func Validate_TypedLocalObjectReference(ctx context.Context, op operation.Operat if earlyReturn { return // do not proceed } - errs = append(errs, validate.PathSegmentName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.PathSegmentName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("kind"), &obj.Kind, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.TypedLocalObjectReference) *string { return &oldObj.Kind }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.TypedLocalObjectReference) *string { + return &oldObj.Kind + }) + errs = append(errs, fn(fldPath.Child("kind"), &obj.Kind, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.TypedLocalObjectReference.Name - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.TypedLocalObjectReference.Name + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -905,65 +1289,71 @@ func Validate_TypedLocalObjectReference(ctx context.Context, op operation.Operat if earlyReturn { return // do not proceed } - errs = append(errs, validate.PathSegmentName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.PathSegmentName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("name"), &obj.Name, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.TypedLocalObjectReference) *string { return &oldObj.Name }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.TypedLocalObjectReference) *string { + return &oldObj.Name + }) + errs = append(errs, fn(fldPath.Child("name"), &obj.Name, oldVal, oldObj != nil)...) + } return errs } // Validate_Workload validates an instance of Workload according // to declarative validation rules in the API schema. -func Validate_Workload(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.Workload) (errs field.ErrorList) { +func Validate_Workload( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.Workload) (errs field.ErrorList) { + // field schedulingv1alpha2.Workload.TypeMeta has no validation // field schedulingv1alpha2.Workload.ObjectMeta has no validation - // field schedulingv1alpha2.Workload.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.WorkloadSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.Workload.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.WorkloadSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_WorkloadSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.Workload) *schedulingv1alpha2.WorkloadSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.Workload) *schedulingv1alpha2.WorkloadSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_WorkloadPodGroupTemplateReference validates an instance of WorkloadPodGroupTemplateReference according // to declarative validation rules in the API schema. -func Validate_WorkloadPodGroupTemplateReference(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference) (errs field.ErrorList) { - // field schedulingv1alpha2.WorkloadPodGroupTemplateReference.WorkloadName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil - } - // call field-attached validations - earlyReturn := false - if e := validate.RequiredValue(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return // do not proceed - } - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) - return - }(fldPath.Child("workloadName"), &obj.WorkloadName, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference) *string { - return &oldObj.WorkloadName - }), oldObj != nil)...) +func Validate_WorkloadPodGroupTemplateReference( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference) (errs field.ErrorList) { - // field schedulingv1alpha2.WorkloadPodGroupTemplateReference.PodGroupTemplateName - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.WorkloadPodGroupTemplateReference.WorkloadName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -974,24 +1364,69 @@ func Validate_WorkloadPodGroupTemplateReference(ctx context.Context, op operatio if earlyReturn { return // do not proceed } - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("podGroupTemplateName"), &obj.PodGroupTemplateName, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference) *string { - return &oldObj.PodGroupTemplateName - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference) *string { + return &oldObj.WorkloadName + }) + errs = append(errs, fn(fldPath.Child("workloadName"), &obj.WorkloadName, oldVal, oldObj != nil)...) + } + + { // field schedulingv1alpha2.WorkloadPodGroupTemplateReference.PodGroupTemplateName + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } + } + // call field-attached validations + earlyReturn := false + if e := validate.RequiredValue(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return // do not proceed + } + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.WorkloadPodGroupTemplateReference) *string { + return &oldObj.PodGroupTemplateName + }) + errs = append(errs, fn(fldPath.Child("podGroupTemplateName"), &obj.PodGroupTemplateName, oldVal, oldObj != nil)...) + } return errs } // Validate_WorkloadSpec validates an instance of WorkloadSpec according // to declarative validation rules in the API schema. -func Validate_WorkloadSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha2.WorkloadSpec) (errs field.ErrorList) { - // field schedulingv1alpha2.WorkloadSpec.ControllerRef - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *schedulingv1alpha2.TypedLocalObjectReference, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_WorkloadSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.WorkloadSpec) (errs field.ErrorList) { + + { // field schedulingv1alpha2.WorkloadSpec.ControllerRef + fn := func( + fldPath *field.Path, + obj, oldObj *schedulingv1alpha2.TypedLocalObjectReference, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1008,16 +1443,24 @@ func Validate_WorkloadSpec(ctx context.Context, op operation.Operation, fldPath // call the type's validation function errs = append(errs, Validate_TypedLocalObjectReference(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("controllerRef"), obj.ControllerRef, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.WorkloadSpec) *schedulingv1alpha2.TypedLocalObjectReference { - return oldObj.ControllerRef - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.WorkloadSpec) *schedulingv1alpha2.TypedLocalObjectReference { + return oldObj.ControllerRef + }) + errs = append(errs, fn(fldPath.Child("controllerRef"), obj.ControllerRef, oldVal, oldObj != nil)...) + } - // field schedulingv1alpha2.WorkloadSpec.PodGroupTemplates - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []schedulingv1alpha2.PodGroupTemplate, oldValueCorrelated bool) (errs field.ErrorList) { + { // field schedulingv1alpha2.WorkloadSpec.PodGroupTemplates + fn := func( + fldPath *field.Path, + obj, oldObj []schedulingv1alpha2.PodGroupTemplate, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -1037,17 +1480,27 @@ func Validate_WorkloadSpec(ctx context.Context, op operation.Operation, fldPath return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupTemplate, b schedulingv1alpha2.PodGroupTemplate) bool { - return a.Name == b.Name - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupTemplate, b schedulingv1alpha2.PodGroupTemplate) bool { + return a.Name == b.Name + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a schedulingv1alpha2.PodGroupTemplate, b schedulingv1alpha2.PodGroupTemplate) bool { - return a.Name == b.Name - }, validate.SemanticDeepEqual, Validate_PodGroupTemplate)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a schedulingv1alpha2.PodGroupTemplate, b schedulingv1alpha2.PodGroupTemplate) bool { + return a.Name == b.Name + }, validate.SemanticDeepEqual, Validate_PodGroupTemplate); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("podGroupTemplates"), obj.PodGroupTemplates, safe.Field(oldObj, func(oldObj *schedulingv1alpha2.WorkloadSpec) []schedulingv1alpha2.PodGroupTemplate { - return oldObj.PodGroupTemplates - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *schedulingv1alpha2.WorkloadSpec) []schedulingv1alpha2.PodGroupTemplate { + return oldObj.PodGroupTemplates + }) + errs = append(errs, fn(fldPath.Child("podGroupTemplates"), obj.PodGroupTemplates, oldVal, oldObj != nil)...) + } return errs } diff --git a/pkg/apis/storage/v1/zz_generated.validations.go b/pkg/apis/storage/v1/zz_generated.validations.go index 55b3acf4942..b0e60839f6d 100644 --- a/pkg/apis/storage/v1/zz_generated.validations.go +++ b/pkg/apis/storage/v1/zz_generated.validations.go @@ -41,36 +41,57 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type StorageClass - scheme.AddValidationFunc((*storagev1.StorageClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StorageClass(ctx, op, nil /* fldPath */, obj.(*storagev1.StorageClass), safe.Cast[*storagev1.StorageClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*storagev1.StorageClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StorageClass( + ctx, op, nil, /* fldPath */ + obj.(*storagev1.StorageClass), + safe.Cast[*storagev1.StorageClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type VolumeAttachment - scheme.AddValidationFunc((*storagev1.VolumeAttachment)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_VolumeAttachment(ctx, op, nil /* fldPath */, obj.(*storagev1.VolumeAttachment), safe.Cast[*storagev1.VolumeAttachment](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*storagev1.VolumeAttachment)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_VolumeAttachment( + ctx, op, nil, /* fldPath */ + obj.(*storagev1.VolumeAttachment), + safe.Cast[*storagev1.VolumeAttachment](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_StorageClass validates an instance of StorageClass according // to declarative validation rules in the API schema. -func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1.StorageClass) (errs field.ErrorList) { +func Validate_StorageClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1.StorageClass) (errs field.ErrorList) { + // field storagev1.StorageClass.TypeMeta has no validation // field storagev1.StorageClass.ObjectMeta has no validation - // field storagev1.StorageClass.Provisioner - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1.StorageClass.Provisioner + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -86,14 +107,24 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("provisioner"), &obj.Provisioner, safe.Field(oldObj, func(oldObj *storagev1.StorageClass) *string { return &oldObj.Provisioner }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1.StorageClass) *string { + return &oldObj.Provisioner + }) + errs = append(errs, fn(fldPath.Child("provisioner"), &obj.Provisioner, oldVal, oldObj != nil)...) + } - // field storagev1.StorageClass.Parameters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1.StorageClass.Parameters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -108,14 +139,24 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("parameters"), obj.Parameters, safe.Field(oldObj, func(oldObj *storagev1.StorageClass) map[string]string { return oldObj.Parameters }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1.StorageClass) map[string]string { + return oldObj.Parameters + }) + errs = append(errs, fn(fldPath.Child("parameters"), obj.Parameters, oldVal, oldObj != nil)...) + } - // field storagev1.StorageClass.ReclaimPolicy - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *corev1.PersistentVolumeReclaimPolicy, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1.StorageClass.ReclaimPolicy + fn := func( + fldPath *field.Path, + obj, oldObj *corev1.PersistentVolumeReclaimPolicy, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -130,19 +171,27 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("reclaimPolicy"), obj.ReclaimPolicy, safe.Field(oldObj, func(oldObj *storagev1.StorageClass) *corev1.PersistentVolumeReclaimPolicy { - return oldObj.ReclaimPolicy - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1.StorageClass) *corev1.PersistentVolumeReclaimPolicy { + return oldObj.ReclaimPolicy + }) + errs = append(errs, fn(fldPath.Child("reclaimPolicy"), obj.ReclaimPolicy, oldVal, oldObj != nil)...) + } // field storagev1.StorageClass.MountOptions has no validation // field storagev1.StorageClass.AllowVolumeExpansion has no validation - // field storagev1.StorageClass.VolumeBindingMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *storagev1.VolumeBindingMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1.StorageClass.VolumeBindingMode + fn := func( + fldPath *field.Path, + obj, oldObj *storagev1.VolumeBindingMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -157,7 +206,13 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("volumeBindingMode"), obj.VolumeBindingMode, safe.Field(oldObj, func(oldObj *storagev1.StorageClass) *storagev1.VolumeBindingMode { return oldObj.VolumeBindingMode }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1.StorageClass) *storagev1.VolumeBindingMode { + return oldObj.VolumeBindingMode + }) + errs = append(errs, fn(fldPath.Child("volumeBindingMode"), obj.VolumeBindingMode, oldVal, oldObj != nil)...) + } // field storagev1.StorageClass.AllowedTopologies has no validation return errs @@ -165,16 +220,23 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath // Validate_VolumeAttachment validates an instance of VolumeAttachment according // to declarative validation rules in the API schema. -func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1.VolumeAttachment) (errs field.ErrorList) { +func Validate_VolumeAttachment( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1.VolumeAttachment) (errs field.ErrorList) { + // field storagev1.VolumeAttachment.TypeMeta has no validation // field storagev1.VolumeAttachment.ObjectMeta has no validation - // field storagev1.VolumeAttachment.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *storagev1.VolumeAttachmentSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1.VolumeAttachment.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *storagev1.VolumeAttachmentSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -188,7 +250,13 @@ func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_VolumeAttachmentSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *storagev1.VolumeAttachment) *storagev1.VolumeAttachmentSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1.VolumeAttachment) *storagev1.VolumeAttachmentSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field storagev1.VolumeAttachment.Status has no validation return errs @@ -196,13 +264,20 @@ func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldP // Validate_VolumeAttachmentSpec validates an instance of VolumeAttachmentSpec according // to declarative validation rules in the API schema. -func Validate_VolumeAttachmentSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1.VolumeAttachmentSpec) (errs field.ErrorList) { - // field storagev1.VolumeAttachmentSpec.Attacher - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_VolumeAttachmentSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1.VolumeAttachmentSpec) (errs field.ErrorList) { + + { // field storagev1.VolumeAttachmentSpec.Attacher + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -213,10 +288,20 @@ func Validate_VolumeAttachmentSpec(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("attacher"), &obj.Attacher, safe.Field(oldObj, func(oldObj *storagev1.VolumeAttachmentSpec) *string { return &oldObj.Attacher }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1.VolumeAttachmentSpec) *string { + return &oldObj.Attacher + }) + errs = append(errs, fn(fldPath.Child("attacher"), &obj.Attacher, oldVal, oldObj != nil)...) + } // field storagev1.VolumeAttachmentSpec.Source has no validation // field storagev1.VolumeAttachmentSpec.NodeName has no validation diff --git a/pkg/apis/storage/v1alpha1/zz_generated.validations.go b/pkg/apis/storage/v1alpha1/zz_generated.validations.go index 3f8a2ee3f82..a3c924487e2 100644 --- a/pkg/apis/storage/v1alpha1/zz_generated.validations.go +++ b/pkg/apis/storage/v1alpha1/zz_generated.validations.go @@ -40,28 +40,42 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type VolumeAttachment - scheme.AddValidationFunc((*storagev1alpha1.VolumeAttachment)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_VolumeAttachment(ctx, op, nil /* fldPath */, obj.(*storagev1alpha1.VolumeAttachment), safe.Cast[*storagev1alpha1.VolumeAttachment](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*storagev1alpha1.VolumeAttachment)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_VolumeAttachment( + ctx, op, nil, /* fldPath */ + obj.(*storagev1alpha1.VolumeAttachment), + safe.Cast[*storagev1alpha1.VolumeAttachment](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_VolumeAttachment validates an instance of VolumeAttachment according // to declarative validation rules in the API schema. -func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1alpha1.VolumeAttachment) (errs field.ErrorList) { +func Validate_VolumeAttachment( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1alpha1.VolumeAttachment) (errs field.ErrorList) { + // field storagev1alpha1.VolumeAttachment.TypeMeta has no validation // field storagev1alpha1.VolumeAttachment.ObjectMeta has no validation - // field storagev1alpha1.VolumeAttachment.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *storagev1alpha1.VolumeAttachmentSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1alpha1.VolumeAttachment.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *storagev1alpha1.VolumeAttachmentSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -75,9 +89,13 @@ func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_VolumeAttachmentSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *storagev1alpha1.VolumeAttachment) *storagev1alpha1.VolumeAttachmentSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1alpha1.VolumeAttachment) *storagev1alpha1.VolumeAttachmentSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field storagev1alpha1.VolumeAttachment.Status has no validation return errs @@ -85,13 +103,20 @@ func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldP // Validate_VolumeAttachmentSpec validates an instance of VolumeAttachmentSpec according // to declarative validation rules in the API schema. -func Validate_VolumeAttachmentSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1alpha1.VolumeAttachmentSpec) (errs field.ErrorList) { - // field storagev1alpha1.VolumeAttachmentSpec.Attacher - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_VolumeAttachmentSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1alpha1.VolumeAttachmentSpec) (errs field.ErrorList) { + + { // field storagev1alpha1.VolumeAttachmentSpec.Attacher + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -102,10 +127,20 @@ func Validate_VolumeAttachmentSpec(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("attacher"), &obj.Attacher, safe.Field(oldObj, func(oldObj *storagev1alpha1.VolumeAttachmentSpec) *string { return &oldObj.Attacher }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1alpha1.VolumeAttachmentSpec) *string { + return &oldObj.Attacher + }) + errs = append(errs, fn(fldPath.Child("attacher"), &obj.Attacher, oldVal, oldObj != nil)...) + } // field storagev1alpha1.VolumeAttachmentSpec.Source has no validation // field storagev1alpha1.VolumeAttachmentSpec.NodeName has no validation diff --git a/pkg/apis/storage/v1beta1/zz_generated.validations.go b/pkg/apis/storage/v1beta1/zz_generated.validations.go index 43aff91ac77..593d81c5113 100644 --- a/pkg/apis/storage/v1beta1/zz_generated.validations.go +++ b/pkg/apis/storage/v1beta1/zz_generated.validations.go @@ -41,36 +41,57 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type StorageClass - scheme.AddValidationFunc((*storagev1beta1.StorageClass)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StorageClass(ctx, op, nil /* fldPath */, obj.(*storagev1beta1.StorageClass), safe.Cast[*storagev1beta1.StorageClass](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*storagev1beta1.StorageClass)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StorageClass( + ctx, op, nil, /* fldPath */ + obj.(*storagev1beta1.StorageClass), + safe.Cast[*storagev1beta1.StorageClass](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type VolumeAttachment - scheme.AddValidationFunc((*storagev1beta1.VolumeAttachment)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/status": - return Validate_VolumeAttachment(ctx, op, nil /* fldPath */, obj.(*storagev1beta1.VolumeAttachment), safe.Cast[*storagev1beta1.VolumeAttachment](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*storagev1beta1.VolumeAttachment)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/status": + return Validate_VolumeAttachment( + ctx, op, nil, /* fldPath */ + obj.(*storagev1beta1.VolumeAttachment), + safe.Cast[*storagev1beta1.VolumeAttachment](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_StorageClass validates an instance of StorageClass according // to declarative validation rules in the API schema. -func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1beta1.StorageClass) (errs field.ErrorList) { +func Validate_StorageClass( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1beta1.StorageClass) (errs field.ErrorList) { + // field storagev1beta1.StorageClass.TypeMeta has no validation // field storagev1beta1.StorageClass.ObjectMeta has no validation - // field storagev1beta1.StorageClass.Provisioner - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1beta1.StorageClass.Provisioner + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -86,14 +107,24 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("provisioner"), &obj.Provisioner, safe.Field(oldObj, func(oldObj *storagev1beta1.StorageClass) *string { return &oldObj.Provisioner }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1beta1.StorageClass) *string { + return &oldObj.Provisioner + }) + errs = append(errs, fn(fldPath.Child("provisioner"), &obj.Provisioner, oldVal, oldObj != nil)...) + } - // field storagev1beta1.StorageClass.Parameters - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1beta1.StorageClass.Parameters + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -108,14 +139,24 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("parameters"), obj.Parameters, safe.Field(oldObj, func(oldObj *storagev1beta1.StorageClass) map[string]string { return oldObj.Parameters }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1beta1.StorageClass) map[string]string { + return oldObj.Parameters + }) + errs = append(errs, fn(fldPath.Child("parameters"), obj.Parameters, oldVal, oldObj != nil)...) + } - // field storagev1beta1.StorageClass.ReclaimPolicy - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *v1.PersistentVolumeReclaimPolicy, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1beta1.StorageClass.ReclaimPolicy + fn := func( + fldPath *field.Path, + obj, oldObj *v1.PersistentVolumeReclaimPolicy, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -130,19 +171,27 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("reclaimPolicy"), obj.ReclaimPolicy, safe.Field(oldObj, func(oldObj *storagev1beta1.StorageClass) *v1.PersistentVolumeReclaimPolicy { - return oldObj.ReclaimPolicy - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1beta1.StorageClass) *v1.PersistentVolumeReclaimPolicy { + return oldObj.ReclaimPolicy + }) + errs = append(errs, fn(fldPath.Child("reclaimPolicy"), obj.ReclaimPolicy, oldVal, oldObj != nil)...) + } // field storagev1beta1.StorageClass.MountOptions has no validation // field storagev1beta1.StorageClass.AllowVolumeExpansion has no validation - // field storagev1beta1.StorageClass.VolumeBindingMode - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *storagev1beta1.VolumeBindingMode, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1beta1.StorageClass.VolumeBindingMode + fn := func( + fldPath *field.Path, + obj, oldObj *storagev1beta1.VolumeBindingMode, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -157,9 +206,13 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("volumeBindingMode"), obj.VolumeBindingMode, safe.Field(oldObj, func(oldObj *storagev1beta1.StorageClass) *storagev1beta1.VolumeBindingMode { - return oldObj.VolumeBindingMode - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1beta1.StorageClass) *storagev1beta1.VolumeBindingMode { + return oldObj.VolumeBindingMode + }) + errs = append(errs, fn(fldPath.Child("volumeBindingMode"), obj.VolumeBindingMode, oldVal, oldObj != nil)...) + } // field storagev1beta1.StorageClass.AllowedTopologies has no validation return errs @@ -167,16 +220,23 @@ func Validate_StorageClass(ctx context.Context, op operation.Operation, fldPath // Validate_VolumeAttachment validates an instance of VolumeAttachment according // to declarative validation rules in the API schema. -func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1beta1.VolumeAttachment) (errs field.ErrorList) { +func Validate_VolumeAttachment( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1beta1.VolumeAttachment) (errs field.ErrorList) { + // field storagev1beta1.VolumeAttachment.TypeMeta has no validation // field storagev1beta1.VolumeAttachment.ObjectMeta has no validation - // field storagev1beta1.VolumeAttachment.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *storagev1beta1.VolumeAttachmentSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field storagev1beta1.VolumeAttachment.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *storagev1beta1.VolumeAttachmentSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -190,9 +250,13 @@ func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_VolumeAttachmentSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *storagev1beta1.VolumeAttachment) *storagev1beta1.VolumeAttachmentSpec { - return &oldObj.Spec - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1beta1.VolumeAttachment) *storagev1beta1.VolumeAttachmentSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field storagev1beta1.VolumeAttachment.Status has no validation return errs @@ -200,13 +264,20 @@ func Validate_VolumeAttachment(ctx context.Context, op operation.Operation, fldP // Validate_VolumeAttachmentSpec validates an instance of VolumeAttachmentSpec according // to declarative validation rules in the API schema. -func Validate_VolumeAttachmentSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *storagev1beta1.VolumeAttachmentSpec) (errs field.ErrorList) { - // field storagev1beta1.VolumeAttachmentSpec.Attacher - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_VolumeAttachmentSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *storagev1beta1.VolumeAttachmentSpec) (errs field.ErrorList) { + + { // field storagev1beta1.VolumeAttachmentSpec.Attacher + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -217,10 +288,20 @@ func Validate_VolumeAttachmentSpec(ctx context.Context, op operation.Operation, if earlyReturn { return // do not proceed } - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha()...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 63).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("attacher"), &obj.Attacher, safe.Field(oldObj, func(oldObj *storagev1beta1.VolumeAttachmentSpec) *string { return &oldObj.Attacher }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *storagev1beta1.VolumeAttachmentSpec) *string { + return &oldObj.Attacher + }) + errs = append(errs, fn(fldPath.Child("attacher"), &obj.Attacher, oldVal, oldObj != nil)...) + } // field storagev1beta1.VolumeAttachmentSpec.Source has no validation // field storagev1beta1.VolumeAttachmentSpec.NodeName has no validation diff --git a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.validations.go b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.validations.go index cb308ec5011..897e5733d2b 100644 --- a/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.validations.go +++ b/staging/src/k8s.io/api/extensions/v1beta1/zz_generated.validations.go @@ -39,33 +39,54 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *runtime.Scheme) error { // type NetworkPolicy - scheme.AddValidationFunc((*NetworkPolicy)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_NetworkPolicy(ctx, op, nil /* fldPath */, obj.(*NetworkPolicy), safe.Cast[*NetworkPolicy](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*NetworkPolicy)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_NetworkPolicy( + ctx, op, nil, /* fldPath */ + obj.(*NetworkPolicy), + safe.Cast[*NetworkPolicy](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Scale - scheme.AddValidationFunc((*Scale)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/scale": - return Validate_Scale(ctx, op, nil /* fldPath */, obj.(*Scale), safe.Cast[*Scale](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Scale)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/scale": + return Validate_Scale( + ctx, op, nil, /* fldPath */ + obj.(*Scale), + safe.Cast[*Scale](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_IPBlock validates an instance of IPBlock according // to declarative validation rules in the API schema. -func Validate_IPBlock(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IPBlock) (errs field.ErrorList) { - // field IPBlock.CIDR - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_IPBlock( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *IPBlock) (errs field.ErrorList) { + + { // field IPBlock.CIDR + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -77,7 +98,13 @@ func Validate_IPBlock(ctx context.Context, op operation.Operation, fldPath *fiel return // do not proceed } return - }(fldPath.Child("cidr"), &obj.CIDR, safe.Field(oldObj, func(oldObj *IPBlock) *string { return &oldObj.CIDR }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *IPBlock) *string { + return &oldObj.CIDR + }) + errs = append(errs, fn(fldPath.Child("cidr"), &obj.CIDR, oldVal, oldObj != nil)...) + } // field IPBlock.Except has no validation return errs @@ -85,36 +112,56 @@ func Validate_IPBlock(ctx context.Context, op operation.Operation, fldPath *fiel // Validate_NetworkPolicy validates an instance of NetworkPolicy according // to declarative validation rules in the API schema. -func Validate_NetworkPolicy(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NetworkPolicy) (errs field.ErrorList) { +func Validate_NetworkPolicy( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NetworkPolicy) (errs field.ErrorList) { + // field NetworkPolicy.TypeMeta has no validation // field NetworkPolicy.ObjectMeta has no validation - // field NetworkPolicy.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NetworkPolicySpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field NetworkPolicy.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *NetworkPolicySpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_NetworkPolicySpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *NetworkPolicy) *NetworkPolicySpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NetworkPolicy) *NetworkPolicySpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicyEgressRule validates an instance of NetworkPolicyEgressRule according // to declarative validation rules in the API schema. -func Validate_NetworkPolicyEgressRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NetworkPolicyEgressRule) (errs field.ErrorList) { +func Validate_NetworkPolicyEgressRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NetworkPolicyEgressRule) (errs field.ErrorList) { + // field NetworkPolicyEgressRule.Ports has no validation - // field NetworkPolicyEgressRule.To - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NetworkPolicyPeer, oldValueCorrelated bool) (errs field.ErrorList) { + { // field NetworkPolicyEgressRule.To + fn := func( + fldPath *field.Path, + obj, oldObj []NetworkPolicyPeer, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -125,24 +172,39 @@ func Validate_NetworkPolicyEgressRule(ctx context.Context, op operation.Operatio return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("to"), obj.To, safe.Field(oldObj, func(oldObj *NetworkPolicyEgressRule) []NetworkPolicyPeer { return oldObj.To }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NetworkPolicyEgressRule) []NetworkPolicyPeer { + return oldObj.To + }) + errs = append(errs, fn(fldPath.Child("to"), obj.To, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicyIngressRule validates an instance of NetworkPolicyIngressRule according // to declarative validation rules in the API schema. -func Validate_NetworkPolicyIngressRule(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NetworkPolicyIngressRule) (errs field.ErrorList) { +func Validate_NetworkPolicyIngressRule( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NetworkPolicyIngressRule) (errs field.ErrorList) { + // field NetworkPolicyIngressRule.Ports has no validation - // field NetworkPolicyIngressRule.From - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NetworkPolicyPeer, oldValueCorrelated bool) (errs field.ErrorList) { + { // field NetworkPolicyIngressRule.From + fn := func( + fldPath *field.Path, + obj, oldObj []NetworkPolicyPeer, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -153,25 +215,40 @@ func Validate_NetworkPolicyIngressRule(ctx context.Context, op operation.Operati return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyPeer); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("from"), obj.From, safe.Field(oldObj, func(oldObj *NetworkPolicyIngressRule) []NetworkPolicyPeer { return oldObj.From }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NetworkPolicyIngressRule) []NetworkPolicyPeer { + return oldObj.From + }) + errs = append(errs, fn(fldPath.Child("from"), obj.From, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicyPeer validates an instance of NetworkPolicyPeer according // to declarative validation rules in the API schema. -func Validate_NetworkPolicyPeer(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NetworkPolicyPeer) (errs field.ErrorList) { +func Validate_NetworkPolicyPeer( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NetworkPolicyPeer) (errs field.ErrorList) { + // field NetworkPolicyPeer.PodSelector has no validation // field NetworkPolicyPeer.NamespaceSelector has no validation - // field NetworkPolicyPeer.IPBlock - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IPBlock, oldValueCorrelated bool) (errs field.ErrorList) { + { // field NetworkPolicyPeer.IPBlock + fn := func( + fldPath *field.Path, + obj, oldObj *IPBlock, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -184,22 +261,35 @@ func Validate_NetworkPolicyPeer(ctx context.Context, op operation.Operation, fld // call the type's validation function errs = append(errs, Validate_IPBlock(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("ipBlock"), obj.IPBlock, safe.Field(oldObj, func(oldObj *NetworkPolicyPeer) *IPBlock { return oldObj.IPBlock }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NetworkPolicyPeer) *IPBlock { + return oldObj.IPBlock + }) + errs = append(errs, fn(fldPath.Child("ipBlock"), obj.IPBlock, oldVal, oldObj != nil)...) + } return errs } // Validate_NetworkPolicySpec validates an instance of NetworkPolicySpec according // to declarative validation rules in the API schema. -func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NetworkPolicySpec) (errs field.ErrorList) { +func Validate_NetworkPolicySpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NetworkPolicySpec) (errs field.ErrorList) { + // field NetworkPolicySpec.PodSelector has no validation - // field NetworkPolicySpec.Ingress - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NetworkPolicyIngressRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field NetworkPolicySpec.Ingress + fn := func( + fldPath *field.Path, + obj, oldObj []NetworkPolicyIngressRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -210,16 +300,28 @@ func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyIngressRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyIngressRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ingress"), obj.Ingress, safe.Field(oldObj, func(oldObj *NetworkPolicySpec) []NetworkPolicyIngressRule { return oldObj.Ingress }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NetworkPolicySpec) []NetworkPolicyIngressRule { + return oldObj.Ingress + }) + errs = append(errs, fn(fldPath.Child("ingress"), obj.Ingress, oldVal, oldObj != nil)...) + } - // field NetworkPolicySpec.Egress - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NetworkPolicyEgressRule, oldValueCorrelated bool) (errs field.ErrorList) { + { // field NetworkPolicySpec.Egress + fn := func( + fldPath *field.Path, + obj, oldObj []NetworkPolicyEgressRule, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -230,9 +332,17 @@ func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fld return // do not proceed } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyEgressRule)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NetworkPolicyEgressRule); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("egress"), obj.Egress, safe.Field(oldObj, func(oldObj *NetworkPolicySpec) []NetworkPolicyEgressRule { return oldObj.Egress }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NetworkPolicySpec) []NetworkPolicyEgressRule { + return oldObj.Egress + }) + errs = append(errs, fn(fldPath.Child("egress"), obj.Egress, oldVal, oldObj != nil)...) + } // field NetworkPolicySpec.PolicyTypes has no validation return errs @@ -240,21 +350,34 @@ func Validate_NetworkPolicySpec(ctx context.Context, op operation.Operation, fld // Validate_Scale validates an instance of Scale according // to declarative validation rules in the API schema. -func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Scale) (errs field.ErrorList) { +func Validate_Scale( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Scale) (errs field.ErrorList) { + // field Scale.TypeMeta has no validation // field Scale.ObjectMeta has no validation - // field Scale.Spec - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ScaleSpec, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Scale.Spec + fn := func( + fldPath *field.Path, + obj, oldObj *ScaleSpec, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ScaleSpec(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("spec"), &obj.Spec, safe.Field(oldObj, func(oldObj *Scale) *ScaleSpec { return &oldObj.Spec }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Scale) *ScaleSpec { + return &oldObj.Spec + }) + errs = append(errs, fn(fldPath.Child("spec"), &obj.Spec, oldVal, oldObj != nil)...) + } // field Scale.Status has no validation return errs @@ -262,19 +385,34 @@ func Validate_Scale(ctx context.Context, op operation.Operation, fldPath *field. // Validate_ScaleSpec validates an instance of ScaleSpec according // to declarative validation rules in the API schema. -func Validate_ScaleSpec(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ScaleSpec) (errs field.ErrorList) { - // field ScaleSpec.Replicas - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ScaleSpec( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ScaleSpec) (errs field.ErrorList) { + + { // field ScaleSpec.Replicas + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 0).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("replicas"), &obj.Replicas, safe.Field(oldObj, func(oldObj *ScaleSpec) *int32 { return &oldObj.Replicas }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ScaleSpec) *int32 { + return &oldObj.Replicas + }) + errs = append(errs, fn(fldPath.Child("replicas"), &obj.Replicas, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_field_validations/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_field_validations/zz_generated.validations.go index bcd8947cd5e..6165600d003 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_field_validations/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_field_validations/zz_generated.validations.go @@ -38,108 +38,198 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T2 - scheme.AddValidationFunc((*T2)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T2(ctx, op, nil /* fldPath */, obj.(*T2), safe.Cast[*T2](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T2)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T2( + ctx, op, nil, /* fldPath */ + obj.(*T2), + safe.Cast[*T2](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T4 - scheme.AddValidationFunc((*T4)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T4(ctx, op, nil /* fldPath */, obj.(*T4), safe.Cast[*T4](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T4)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T4( + ctx, op, nil, /* fldPath */ + obj.(*T4), + safe.Cast[*T4](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil - } - // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S")...) - return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S"); len(e) != 0 { + errs = append(errs, e...) + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } + + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } + } + // call field-attached validations + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } - // field T1.T3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T3 + fn := func( + fldPath *field.Path, + obj, oldObj *T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T3")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T3"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("t3"), &obj.T3, safe.Field(oldObj, func(oldObj *T1) *T3 { return &oldObj.T3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T3 { + return &oldObj.T3 + }) + errs = append(errs, fn(fldPath.Child("t3"), &obj.T3, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { + + { // field T2.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T2) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } // Validate_T4 validates an instance of T4 according // to declarative validation rules in the API schema. -func Validate_T4(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T4) (errs field.ErrorList) { - // field T4.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T4( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T4) (errs field.ErrorList) { + + { // field T4.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T4.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T4.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T4) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T4) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_type_validations/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_type_validations/zz_generated.validations.go index b7810d996d1..0fb3e785ea4 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_type_validations/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/all_types_match/with_type_validations/zz_generated.validations.go @@ -38,48 +38,84 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type E1 - scheme.AddValidationFunc((*E1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_E1(ctx, op, nil /* fldPath */, obj.(*E1), safe.Cast[*E1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*E1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_E1( + ctx, op, nil, /* fldPath */ + obj.(*E1), + safe.Cast[*E1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_E1 validates an instance of E1 according // to declarative validation rules in the API schema. -func Validate_E1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1")...) +func Validate_E1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E1) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1")...) +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cohorts/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cohorts/zz_generated.validations.go index fabdab123b4..a8d5baa98d1 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cohorts/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cohorts/zz_generated.validations.go @@ -38,19 +38,29 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T - scheme.AddValidationFunc((*T)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T(ctx, op, nil /* fldPath */, obj.(*T), safe.Cast[*T](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T( + ctx, op, nil, /* fldPath */ + obj.(*T), + safe.Cast[*T](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T validates an instance of T according // to declarative validation rules in the API schema. -func Validate_T(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T) (errs field.ErrorList) { +func Validate_T( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T) (errs field.ErrorList) { + earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -59,8 +69,10 @@ func Validate_T(ctx context.Context, op operation.Operation, fldPath *field.Path if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T Regular")...) - func() { // cohort c2 + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T Regular"); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "c2" earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T c2 ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -69,9 +81,11 @@ func Validate_T(ctx context.Context, op operation.Operation, fldPath *field.Path if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T c2 Regular")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T c2 Regular"); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort c1 + func() { // cohort = "c1" earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T c1 ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -80,17 +94,23 @@ func Validate_T(ctx context.Context, op operation.Operation, fldPath *field.Path if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T c1 Regular")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T c1 Regular"); len(e) != 0 { + errs = append(errs, e...) + } }() // field T.TypeMeta has no validation - // field T.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -101,8 +121,10 @@ func Validate_T(ctx context.Context, op operation.Operation, fldPath *field.Path if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S Regular")...) - func() { // cohort c2 + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S Regular"); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "c2" earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S c2 ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -111,9 +133,11 @@ func Validate_T(ctx context.Context, op operation.Operation, fldPath *field.Path if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S c2 Regular")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S c2 Regular"); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort c1 + func() { // cohort = "c1" earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S c1 ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -122,10 +146,18 @@ func Validate_T(ctx context.Context, op operation.Operation, fldPath *field.Path if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S c1 Regular")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T.S c1 Regular"); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cross_pkg/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cross_pkg/zz_generated.validations.go index 34b737ed028..206446c4e06 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cross_pkg/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/cross_pkg/zz_generated.validations.go @@ -42,336 +42,638 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + // field T1.TypeMeta has no validation - // field T1.PrimitivesT1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PrimitivesT1 + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT1")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, primitives.Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("primitivest1"), &obj.PrimitivesT1, safe.Field(oldObj, func(oldObj *T1) *primitives.T1 { return &oldObj.PrimitivesT1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T1 { + return &oldObj.PrimitivesT1 + }) + errs = append(errs, fn(fldPath.Child("primitivest1"), &obj.PrimitivesT1, oldVal, oldObj != nil)...) + } - // field T1.PrimitivesT1Ptr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PrimitivesT1Ptr + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT1Ptr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT1Ptr"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, primitives.Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("primitivest1Ptr"), obj.PrimitivesT1Ptr, safe.Field(oldObj, func(oldObj *T1) *primitives.T1 { return oldObj.PrimitivesT1Ptr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T1 { + return oldObj.PrimitivesT1Ptr + }) + errs = append(errs, fn(fldPath.Child("primitivest1Ptr"), obj.PrimitivesT1Ptr, oldVal, oldObj != nil)...) + } - // field T1.PrimitivesT2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PrimitivesT2 + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, primitives.Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("primitivest2"), &obj.PrimitivesT2, safe.Field(oldObj, func(oldObj *T1) *primitives.T2 { return &oldObj.PrimitivesT2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T2 { + return &oldObj.PrimitivesT2 + }) + errs = append(errs, fn(fldPath.Child("primitivest2"), &obj.PrimitivesT2, oldVal, oldObj != nil)...) + } - // field T1.PrimitivesT2Ptr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PrimitivesT2Ptr + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT2Ptr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT2Ptr"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, primitives.Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("primitivest2Ptr"), obj.PrimitivesT2Ptr, safe.Field(oldObj, func(oldObj *T1) *primitives.T1 { return oldObj.PrimitivesT2Ptr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T1 { + return oldObj.PrimitivesT2Ptr + }) + errs = append(errs, fn(fldPath.Child("primitivest2Ptr"), obj.PrimitivesT2Ptr, oldVal, oldObj != nil)...) + } - // field T1.PrimitivesT3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PrimitivesT3 + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT3")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT3"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("primitivest3"), &obj.PrimitivesT3, safe.Field(oldObj, func(oldObj *T1) *primitives.T3 { return &oldObj.PrimitivesT3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T3 { + return &oldObj.PrimitivesT3 + }) + errs = append(errs, fn(fldPath.Child("primitivest3"), &obj.PrimitivesT3, oldVal, oldObj != nil)...) + } - // field T1.PrimitivesT3Ptr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PrimitivesT3Ptr + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT3Ptr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.PrimitivesT3Ptr"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, primitives.Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("primitivest3Ptr"), obj.PrimitivesT3Ptr, safe.Field(oldObj, func(oldObj *T1) *primitives.T1 { return oldObj.PrimitivesT3Ptr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T1 { + return oldObj.PrimitivesT3Ptr + }) + errs = append(errs, fn(fldPath.Child("primitivest3Ptr"), obj.PrimitivesT3Ptr, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE1 + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE1")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse1"), &obj.TypedefsE1, safe.Field(oldObj, func(oldObj *T1) *typedefs.E1 { return &oldObj.TypedefsE1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E1 { + return &oldObj.TypedefsE1 + }) + errs = append(errs, fn(fldPath.Child("typedefse1"), &obj.TypedefsE1, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE1Ptr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE1Ptr + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE1Ptr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE1Ptr"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse1Ptr"), obj.TypedefsE1Ptr, safe.Field(oldObj, func(oldObj *T1) *typedefs.E1 { return oldObj.TypedefsE1Ptr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E1 { + return oldObj.TypedefsE1Ptr + }) + errs = append(errs, fn(fldPath.Child("typedefse1Ptr"), obj.TypedefsE1Ptr, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE2 + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse2"), &obj.TypedefsE2, safe.Field(oldObj, func(oldObj *T1) *typedefs.E2 { return &oldObj.TypedefsE2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E2 { + return &oldObj.TypedefsE2 + }) + errs = append(errs, fn(fldPath.Child("typedefse2"), &obj.TypedefsE2, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE2Ptr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE2Ptr + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE2Ptr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE2Ptr"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse2Ptr"), obj.TypedefsE2Ptr, safe.Field(oldObj, func(oldObj *T1) *typedefs.E2 { return oldObj.TypedefsE2Ptr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E2 { + return oldObj.TypedefsE2Ptr + }) + errs = append(errs, fn(fldPath.Child("typedefse2Ptr"), obj.TypedefsE2Ptr, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE3 + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE3")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE3"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E3(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse3"), &obj.TypedefsE3, safe.Field(oldObj, func(oldObj *T1) *typedefs.E3 { return &oldObj.TypedefsE3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E3 { + return &oldObj.TypedefsE3 + }) + errs = append(errs, fn(fldPath.Child("typedefse3"), &obj.TypedefsE3, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE3Ptr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE3Ptr + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE3Ptr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE3Ptr"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E3(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse3Ptr"), obj.TypedefsE3Ptr, safe.Field(oldObj, func(oldObj *T1) *typedefs.E3 { return oldObj.TypedefsE3Ptr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E3 { + return oldObj.TypedefsE3Ptr + }) + errs = append(errs, fn(fldPath.Child("typedefse3Ptr"), obj.TypedefsE3Ptr, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E4, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE4 + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E4, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE4")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE4"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E4(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse4"), &obj.TypedefsE4, safe.Field(oldObj, func(oldObj *T1) *typedefs.E4 { return &oldObj.TypedefsE4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E4 { + return &oldObj.TypedefsE4 + }) + errs = append(errs, fn(fldPath.Child("typedefse4"), &obj.TypedefsE4, oldVal, oldObj != nil)...) + } - // field T1.TypedefsE4Ptr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *typedefs.E4, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.TypedefsE4Ptr + fn := func( + fldPath *field.Path, + obj, oldObj *typedefs.E4, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE4Ptr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.TypedefsE4Ptr"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, typedefs.Validate_E4(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefse4Ptr"), obj.TypedefsE4Ptr, safe.Field(oldObj, func(oldObj *T1) *typedefs.E4 { return oldObj.TypedefsE4Ptr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *typedefs.E4 { + return oldObj.TypedefsE4Ptr + }) + errs = append(errs, fn(fldPath.Child("typedefse4Ptr"), obj.TypedefsE4Ptr, oldVal, oldObj != nil)...) + } - // field T1.OtherString - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *other.StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.OtherString + fn := func( + fldPath *field.Path, + obj, oldObj *other.StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherString")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherString"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("otherString"), &obj.OtherString, safe.Field(oldObj, func(oldObj *T1) *other.StringType { return &oldObj.OtherString }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *other.StringType { + return &oldObj.OtherString + }) + errs = append(errs, fn(fldPath.Child("otherString"), &obj.OtherString, oldVal, oldObj != nil)...) + } - // field T1.OtherStringPtr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *other.StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.OtherStringPtr + fn := func( + fldPath *field.Path, + obj, oldObj *other.StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherStringPtr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherStringPtr"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("otherStringPtr"), obj.OtherStringPtr, safe.Field(oldObj, func(oldObj *T1) *other.StringType { return oldObj.OtherStringPtr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *other.StringType { + return oldObj.OtherStringPtr + }) + errs = append(errs, fn(fldPath.Child("otherStringPtr"), obj.OtherStringPtr, oldVal, oldObj != nil)...) + } - // field T1.OtherInt - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *other.IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.OtherInt + fn := func( + fldPath *field.Path, + obj, oldObj *other.IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherInt")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherInt"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("otherInt"), &obj.OtherInt, safe.Field(oldObj, func(oldObj *T1) *other.IntType { return &oldObj.OtherInt }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *other.IntType { + return &oldObj.OtherInt + }) + errs = append(errs, fn(fldPath.Child("otherInt"), &obj.OtherInt, oldVal, oldObj != nil)...) + } - // field T1.OtherIntPtr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *other.IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.OtherIntPtr + fn := func( + fldPath *field.Path, + obj, oldObj *other.IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherIntPtr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherIntPtr"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("otherIntPtr"), obj.OtherIntPtr, safe.Field(oldObj, func(oldObj *T1) *other.IntType { return oldObj.OtherIntPtr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *other.IntType { + return oldObj.OtherIntPtr + }) + errs = append(errs, fn(fldPath.Child("otherIntPtr"), obj.OtherIntPtr, oldVal, oldObj != nil)...) + } - // field T1.OtherStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *other.StructType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.OtherStruct + fn := func( + fldPath *field.Path, + obj, oldObj *other.StructType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherStruct")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("otherStruct"), &obj.OtherStruct, safe.Field(oldObj, func(oldObj *T1) *other.StructType { return &oldObj.OtherStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *other.StructType { + return &oldObj.OtherStruct + }) + errs = append(errs, fn(fldPath.Child("otherStruct"), &obj.OtherStruct, oldVal, oldObj != nil)...) + } - // field T1.OtherStructPtr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *other.StructType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.OtherStructPtr + fn := func( + fldPath *field.Path, + obj, oldObj *other.StructType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherStructPtr")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.OtherStructPtr"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("otherStructPtr"), obj.OtherStructPtr, safe.Field(oldObj, func(oldObj *T1) *other.StructType { return oldObj.OtherStructPtr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *other.StructType { + return oldObj.OtherStructPtr + }) + errs = append(errs, fn(fldPath.Child("otherStructPtr"), obj.OtherStructPtr, oldVal, oldObj != nil)...) + } - // field T1.SliceOfOtherStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []other.StructType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.SliceOfOtherStruct + fn := func( + fldPath *field.Path, + obj, oldObj []other.StructType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.SliceOfOtherStruct")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StructType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.SliceOfOtherStruct values") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.SliceOfOtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StructType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.SliceOfOtherStruct values") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceOfOtherStruct"), obj.SliceOfOtherStruct, safe.Field(oldObj, func(oldObj *T1) []other.StructType { return oldObj.SliceOfOtherStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) []other.StructType { + return oldObj.SliceOfOtherStruct + }) + errs = append(errs, fn(fldPath.Child("sliceOfOtherStruct"), obj.SliceOfOtherStruct, oldVal, oldObj != nil)...) + } - // field T1.ListMapOfOtherStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []other.StructType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.ListMapOfOtherStruct + fn := func( + fldPath *field.Path, + obj, oldObj []other.StructType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.ListMapOfOtherStruct")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a other.StructType, b other.StructType) bool { return a.StringField == b.StringField }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StructType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.SliceOfOtherStruct values") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.ListMapOfOtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a other.StructType, b other.StructType) bool { return a.StringField == b.StringField }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StructType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.SliceOfOtherStruct values") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a other.StructType, b other.StructType) bool { return a.StringField == b.StringField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a other.StructType, b other.StructType) bool { return a.StringField == b.StringField }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listMapOfOtherStruct"), obj.ListMapOfOtherStruct, safe.Field(oldObj, func(oldObj *T1) []other.StructType { return oldObj.ListMapOfOtherStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) []other.StructType { + return oldObj.ListMapOfOtherStruct + }) + errs = append(errs, fn(fldPath.Child("listMapOfOtherStruct"), obj.ListMapOfOtherStruct, oldVal, oldObj != nil)...) + } - // field T1.MapOfOtherStringToOtherStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[other.StringType]other.StructType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.MapOfOtherStringToOtherStruct + fn := func( + fldPath *field.Path, + obj, oldObj map[other.StringType]other.StructType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.MapOfOtherStringToOtherStruct keys") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.MapOfOtherStringToOtherStruct")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StructType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.MapOfOtherStringToOtherStruct values") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.MapOfOtherStringToOtherStruct keys") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.MapOfOtherStringToOtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *other.StructType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.MapOfOtherStringToOtherStruct values") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapOfOtherStringToOtherStruct"), obj.MapOfOtherStringToOtherStruct, safe.Field(oldObj, func(oldObj *T1) map[other.StringType]other.StructType { return oldObj.MapOfOtherStringToOtherStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) map[other.StringType]other.StructType { + return oldObj.MapOfOtherStringToOtherStruct + }) + errs = append(errs, fn(fldPath.Child("mapOfOtherStringToOtherStruct"), obj.MapOfOtherStringToOtherStruct, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/elide_no_validations/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/elide_no_validations/zz_generated.validations.go index 99dee2639a9..80f8f150750 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/elide_no_validations/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/elide_no_validations/zz_generated.validations.go @@ -38,38 +38,65 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_HasFieldVal validates an instance of HasFieldVal according // to declarative validation rules in the API schema. -func Validate_HasFieldVal(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *HasFieldVal) (errs field.ErrorList) { - // field HasFieldVal.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_HasFieldVal( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *HasFieldVal) (errs field.ErrorList) { + + { // field HasFieldVal.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field HasFieldVal.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field HasFieldVal.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *HasFieldVal) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *HasFieldVal) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } // Validate_HasTypeVal validates an instance of HasTypeVal according // to declarative validation rules in the API schema. -func Validate_HasTypeVal(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *HasTypeVal) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type HasTypeVal")...) +func Validate_HasTypeVal( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *HasTypeVal) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type HasTypeVal"); len(e) != 0 { + errs = append(errs, e...) + } // field HasTypeVal.S has no validation return errs @@ -77,46 +104,81 @@ func Validate_HasTypeVal(ctx context.Context, op operation.Operation, fldPath *f // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + // field T1.TypeMeta has no validation - // field T1.HasTypeVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *HasTypeVal, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.HasTypeVal + fn := func( + fldPath *field.Path, + obj, oldObj *HasTypeVal, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_HasTypeVal(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("hasTypeVal"), &obj.HasTypeVal, safe.Field(oldObj, func(oldObj *T1) *HasTypeVal { return &oldObj.HasTypeVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *HasTypeVal { + return &oldObj.HasTypeVal + }) + errs = append(errs, fn(fldPath.Child("hasTypeVal"), &obj.HasTypeVal, oldVal, oldObj != nil)...) + } - // field T1.HasFieldVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *HasFieldVal, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.HasFieldVal + fn := func( + fldPath *field.Path, + obj, oldObj *HasFieldVal, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_HasFieldVal(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("hasFieldVal"), &obj.HasFieldVal, safe.Field(oldObj, func(oldObj *T1) *HasFieldVal { return &oldObj.HasFieldVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *HasFieldVal { + return &oldObj.HasFieldVal + }) + errs = append(errs, fn(fldPath.Child("hasFieldVal"), &obj.HasFieldVal, oldVal, oldObj != nil)...) + } // field T1.HasNoVal has no validation - // field T1.HasNoValFieldVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *HasNoVal, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.HasNoValFieldVal + fn := func( + fldPath *field.Path, + obj, oldObj *HasNoVal, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.HasNoValFieldVal")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.HasNoValFieldVal"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("hasNoValFieldVal"), &obj.HasNoValFieldVal, safe.Field(oldObj, func(oldObj *T1) *HasNoVal { return &oldObj.HasNoValFieldVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *HasNoVal { + return &oldObj.HasNoValFieldVal + }) + errs = append(errs, fn(fldPath.Child("hasNoValFieldVal"), &obj.HasNoValFieldVal, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/embedded/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/embedded/zz_generated.validations.go index 771fe24ece6..c6be187574c 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/embedded/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/embedded/zz_generated.validations.go @@ -38,92 +38,164 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + // field T1.TypeMeta has no validation - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("T2") }), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("T2") }), &obj.T2, oldVal, oldObj != nil)...) + } - // field T1.T3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T3 + fn := func( + fldPath *field.Path, + obj, oldObj *T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T3(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("T3") }), obj.T3, safe.Field(oldObj, func(oldObj *T1) *T3 { return oldObj.T3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T3 { + return oldObj.T3 + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("T3") }), obj.T3, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { + + { // field T2.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T2.IntField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T2.IntField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *T2) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } return errs } // Validate_T3 validates an instance of T3 according // to declarative validation rules in the API schema. -func Validate_T3(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T3) (errs field.ErrorList) { - // field T3.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil - } - // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T3.StringField")...) - return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *T3) *string { return &oldObj.StringField }), oldObj != nil)...) +func Validate_T3( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T3) (errs field.ErrorList) { - // field T3.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T3.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T3.IntField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T3.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *T3) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T3) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } + + { // field T3.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } + } + // call field-attached validations + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T3.IntField"); len(e) != 0 { + errs = append(errs, e...) + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *T3) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/keys/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/keys/zz_generated.validations.go index c5263056eac..d79569aa2b8 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/keys/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/keys/zz_generated.validations.go @@ -39,120 +39,222 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys)") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField")...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[UnvalidatedStringType]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[UnvalidatedStringType]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnvalidatedStringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField(keys)") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField")...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnvalidatedStringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[UnvalidatedStringType]string { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[UnvalidatedStringType]string { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.MapValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[ValidatedStringType]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[ValidatedStringType]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapValidatedTypedefField(keys)") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapValidatedTypedefField")...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapValidatedTypedefField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapValidatedTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the key type's validation function - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_ValidatedStringType)...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_ValidatedStringType); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapValidatedTypedefField"), obj.MapValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[ValidatedStringType]string { return oldObj.MapValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[ValidatedStringType]string { + return oldObj.MapValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapValidatedTypedefField"), obj.MapValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj UnvalidatedMapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypeField + fn := func( + fldPath *field.Path, + obj, oldObj UnvalidatedMapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypeField(keys)") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypeField")...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypeField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypeField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypeField"), obj.MapTypeField, safe.Field(oldObj, func(oldObj *Struct) UnvalidatedMapType { return oldObj.MapTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) UnvalidatedMapType { + return oldObj.MapTypeField + }) + errs = append(errs, fn(fldPath.Child("mapTypeField"), obj.MapTypeField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedMapTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ValidatedMapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedMapTypeField + fn := func( + fldPath *field.Path, + obj, oldObj ValidatedMapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ValidatedMapTypeField(keys)") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ValidatedMapTypeField")...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ValidatedMapTypeField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ValidatedMapTypeField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_ValidatedMapType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedMapTypeField"), obj.ValidatedMapTypeField, safe.Field(oldObj, func(oldObj *Struct) ValidatedMapType { return oldObj.ValidatedMapTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ValidatedMapType { + return oldObj.ValidatedMapTypeField + }) + errs = append(errs, fn(fldPath.Child("validatedMapTypeField"), obj.ValidatedMapTypeField, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatedMapType validates an instance of ValidatedMapType according // to declarative validation rules in the API schema. -func Validate_ValidatedMapType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ValidatedMapType) (errs field.ErrorList) { - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ValidatedMapType(keys)") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedMapType")...) +func Validate_ValidatedMapType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ValidatedMapType) (errs field.ErrorList) { + + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ValidatedMapType(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedMapType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ValidatedStringType validates an instance of ValidatedStringType according // to declarative validation rules in the API schema. -func Validate_ValidatedStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedStringType")...) +func Validate_ValidatedStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ValidatedStringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedStringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_primitive/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_primitive/zz_generated.validations.go index d74f91485d6..e2520a6146e 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_primitive/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_primitive/zz_generated.validations.go @@ -39,62 +39,111 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_StringType validates an instance of StringType according // to declarative validation rules in the API schema. -func Validate_StringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType")...) +func Validate_StringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_StringType)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_StringType); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[string]StringType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]StringType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } // field Struct.UnvalidatedMapField has no validation return errs diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_struct/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_struct/zz_generated.validations.go index c5f423a7367..0b45bc834b4 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_struct/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/map_of_struct/zz_generated.validations.go @@ -39,72 +39,128 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_OtherStruct validates an instance of OtherStruct according // to declarative validation rules in the API schema. -func Validate_OtherStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct")...) +func Validate_OtherStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_OtherTypedefStruct validates an instance of OtherTypedefStruct according // to declarative validation rules in the API schema. -func Validate_OtherTypedefStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherTypedefStruct")...) +func Validate_OtherTypedefStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherTypedefStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherTypedefStruct"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_OtherStruct)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_OtherStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]OtherStruct { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]OtherStruct { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_OtherTypedefStruct)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_OtherTypedefStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[string]OtherTypedefStruct { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]OtherTypedefStruct { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } // field Struct.UnvalidatedMapField has no validation return errs diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/multiple_validations/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/multiple_validations/zz_generated.validations.go index 188172c4925..2578e4ca889 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/multiple_validations/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/multiple_validations/zz_generated.validations.go @@ -39,47 +39,85 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys) #1") - })...) - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys) #2") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField #2")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*] #1") - })...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*] #2") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys) #1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys) #2") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField #2"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*] #1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*] #2") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } // field Struct.UnvalidatedMapField has no validation return errs diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/typedef_to_map/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/typedef_to_map/zz_generated.validations.go index 28dc10881c3..8a2bfc35d53 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/typedef_to_map/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/maps/typedef_to_map/zz_generated.validations.go @@ -39,88 +39,153 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_MapType validates an instance of MapType according // to declarative validation rules in the API schema. -func Validate_MapType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MapType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType[*]") - })...) +func Validate_MapType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj MapType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_MapTypedefType validates an instance of MapTypedefType according // to declarative validation rules in the API schema. -func Validate_MapTypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MapTypedefType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapTypedefType")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapTypedefType[*]") - })...) +func Validate_MapTypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj MapTypedefType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapTypedefType"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapTypedefType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_StringType)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_StringType); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_StringType validates an instance of StringType according // to declarative validation rules in the API schema. -func Validate_StringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType")...) +func Validate_StringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj MapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_MapType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) MapType { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MapType { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MapTypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj MapTypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_MapTypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) MapTypedefType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MapTypedefType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/multiple_tags/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/multiple_tags/zz_generated.validations.go index 6a7aa362cdf..5b1416b3595 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/multiple_tags/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/multiple_tags/zz_generated.validations.go @@ -38,81 +38,160 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1 #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1 #2")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1 #3")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type T1 #0")...) +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1 #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1 #2"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1 #3"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type T1 #0"); len(e) != 0 { + errs = append(errs, e...) + } // field T1.TypeMeta has no validation - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S false #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S false #2")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S false #3")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S true")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S false #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S false #2"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S false #3"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S true"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2 false #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2 false #2")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2 false #3")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.T2 true")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2 false #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2 false #2"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2 false #3"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.T2 true"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T2 false #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T2 false #2")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type T2 true")...) +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { - // field T2.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T2 false #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T2 false #2"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type T2 true"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field T2.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S false #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S false #2")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T2.S true")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S false #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S false #2"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T2.S true"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T2) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_field_validations/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_field_validations/zz_generated.validations.go index b08696e9cd8..7ce6c6c862f 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_field_validations/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_field_validations/zz_generated.validations.go @@ -38,110 +38,200 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_E1 validates an instance of E1 according // to declarative validation rules in the API schema. -func Validate_E1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1")...) +func Validate_E1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E1) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + // field T1.TypeMeta has no validation - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } - // field T1.T3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T3 + fn := func( + fldPath *field.Path, + obj, oldObj *T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T3")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T3"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("t3"), &obj.T3, safe.Field(oldObj, func(oldObj *T1) *T3 { return &oldObj.T3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T3 { + return &oldObj.T3 + }) + errs = append(errs, fn(fldPath.Child("t3"), &obj.T3, oldVal, oldObj != nil)...) + } - // field T1.E1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.E1 + fn := func( + fldPath *field.Path, + obj, oldObj *E1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E1")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("e1"), &obj.E1, safe.Field(oldObj, func(oldObj *T1) *E1 { return &oldObj.E1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E1 { + return &oldObj.E1 + }) + errs = append(errs, fn(fldPath.Child("e1"), &obj.E1, oldVal, oldObj != nil)...) + } - // field T1.E2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.E2 + fn := func( + fldPath *field.Path, + obj, oldObj *E2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E2"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("e2"), &obj.E2, safe.Field(oldObj, func(oldObj *T1) *E2 { return &oldObj.E2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E2 { + return &oldObj.E2 + }) + errs = append(errs, fn(fldPath.Child("e2"), &obj.E2, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { + + { // field T2.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T2) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_type_validations/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_type_validations/zz_generated.validations.go index dfa60bb6a5e..1508bd7134e 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_type_validations/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/one_type_match/with_type_validations/zz_generated.validations.go @@ -38,20 +38,32 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1")...) +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1"); len(e) != 0 { + errs = append(errs, e...) + } // field T1.TypeMeta has no validation return errs diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/structs/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/structs/zz_generated.validations.go index 5d17ed257b9..34f8c98e85b 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/structs/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/structs/zz_generated.validations.go @@ -38,147 +38,261 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T00 - scheme.AddValidationFunc((*T00)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T00(ctx, op, nil /* fldPath */, obj.(*T00), safe.Cast[*T00](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T00)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T00( + ctx, op, nil, /* fldPath */ + obj.(*T00), + safe.Cast[*T00](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T01 - scheme.AddValidationFunc((*T01)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T01(ctx, op, nil /* fldPath */, obj.(*T01), safe.Cast[*T01](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T01)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T01( + ctx, op, nil, /* fldPath */ + obj.(*T01), + safe.Cast[*T01](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T02 - scheme.AddValidationFunc((*T02)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T02(ctx, op, nil /* fldPath */, obj.(*T02), safe.Cast[*T02](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T02)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T02( + ctx, op, nil, /* fldPath */ + obj.(*T02), + safe.Cast[*T02](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T03 - scheme.AddValidationFunc((*T03)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T03(ctx, op, nil /* fldPath */, obj.(*T03), safe.Cast[*T03](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T03)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T03( + ctx, op, nil, /* fldPath */ + obj.(*T03), + safe.Cast[*T03](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type TMultiple - scheme.AddValidationFunc((*TMultiple)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_TMultiple(ctx, op, nil /* fldPath */, obj.(*TMultiple), safe.Cast[*TMultiple](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*TMultiple)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_TMultiple( + ctx, op, nil, /* fldPath */ + obj.(*TMultiple), + safe.Cast[*TMultiple](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T00 validates an instance of T00 according // to declarative validation rules in the API schema. -func Validate_T00(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T00) (errs field.ErrorList) { +func Validate_T00( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T00) (errs field.ErrorList) { + // field T00.TypeMeta has no validation // field T00.S has no validation // field T00.PS has no validation - // field T00.T - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T00.T + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t"), &obj.T, safe.Field(oldObj, func(oldObj *T00) *Tother { return &oldObj.T }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T00) *Tother { + return &oldObj.T + }) + errs = append(errs, fn(fldPath.Child("t"), &obj.T, oldVal, oldObj != nil)...) + } - // field T00.PT - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T00.PT + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt"), obj.PT, safe.Field(oldObj, func(oldObj *T00) *Tother { return oldObj.PT }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T00) *Tother { + return oldObj.PT + }) + errs = append(errs, fn(fldPath.Child("pt"), obj.PT, oldVal, oldObj != nil)...) + } return errs } // Validate_T01 validates an instance of T01 according // to declarative validation rules in the API schema. -func Validate_T01(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T01) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01, no flags")...) +func Validate_T01( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T01) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01, no flags"); len(e) != 0 { + errs = append(errs, e...) + } // field T01.TypeMeta has no validation - // field T01.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T01.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.S, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.S, no flags"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T01) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T01) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field T01.PS - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T01.PS + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.PS, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.PS, no flags"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ps"), obj.PS, safe.Field(oldObj, func(oldObj *T01) *string { return oldObj.PS }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T01) *string { + return oldObj.PS + }) + errs = append(errs, fn(fldPath.Child("ps"), obj.PS, oldVal, oldObj != nil)...) + } - // field T01.T - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T01.T + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.T, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.T, no flags"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t"), &obj.T, safe.Field(oldObj, func(oldObj *T01) *Tother { return &oldObj.T }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T01) *Tother { + return &oldObj.T + }) + errs = append(errs, fn(fldPath.Child("t"), &obj.T, oldVal, oldObj != nil)...) + } - // field T01.PT - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T01.PT + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.PT, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T01.PT, no flags"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt"), obj.PT, safe.Field(oldObj, func(oldObj *T01) *Tother { return oldObj.PT }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T01) *Tother { + return oldObj.PT + }) + errs = append(errs, fn(fldPath.Child("pt"), obj.PT, oldVal, oldObj != nil)...) + } return errs } // Validate_T02 validates an instance of T02 according // to declarative validation rules in the API schema. -func Validate_T02(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T02) (errs field.ErrorList) { +func Validate_T02( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T02) (errs field.ErrorList) { + earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T02, ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -190,12 +304,16 @@ func Validate_T02(ctx context.Context, op operation.Operation, fldPath *field.Pa // field T02.TypeMeta has no validation - // field T02.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T02.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -207,14 +325,24 @@ func Validate_T02(ctx context.Context, op operation.Operation, fldPath *field.Pa return // do not proceed } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T02) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T02) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field T02.PS - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T02.PS + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -226,14 +354,24 @@ func Validate_T02(ctx context.Context, op operation.Operation, fldPath *field.Pa return // do not proceed } return - }(fldPath.Child("ps"), obj.PS, safe.Field(oldObj, func(oldObj *T02) *string { return oldObj.PS }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T02) *string { + return oldObj.PS + }) + errs = append(errs, fn(fldPath.Child("ps"), obj.PS, oldVal, oldObj != nil)...) + } - // field T02.T - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T02.T + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -247,14 +385,24 @@ func Validate_T02(ctx context.Context, op operation.Operation, fldPath *field.Pa // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t"), &obj.T, safe.Field(oldObj, func(oldObj *T02) *Tother { return &oldObj.T }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T02) *Tother { + return &oldObj.T + }) + errs = append(errs, fn(fldPath.Child("t"), &obj.T, oldVal, oldObj != nil)...) + } - // field T02.PT - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T02.PT + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -268,14 +416,23 @@ func Validate_T02(ctx context.Context, op operation.Operation, fldPath *field.Pa // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt"), obj.PT, safe.Field(oldObj, func(oldObj *T02) *Tother { return oldObj.PT }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T02) *Tother { + return oldObj.PT + }) + errs = append(errs, fn(fldPath.Child("pt"), obj.PT, oldVal, oldObj != nil)...) + } return errs } // Validate_T03 validates an instance of T03 according // to declarative validation rules in the API schema. -func Validate_T03(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T03) (errs field.ErrorList) { +func Validate_T03( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T03) (errs field.ErrorList) { + earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03, ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -284,16 +441,22 @@ func Validate_T03(ctx context.Context, op operation.Operation, fldPath *field.Pa if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03, no flags"); len(e) != 0 { + errs = append(errs, e...) + } // field T03.TypeMeta has no validation - // field T03.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T03.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -304,16 +467,28 @@ func Validate_T03(ctx context.Context, op operation.Operation, fldPath *field.Pa if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.S, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.S, no flags"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T03) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T03) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field T03.PS - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T03.PS + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -324,16 +499,28 @@ func Validate_T03(ctx context.Context, op operation.Operation, fldPath *field.Pa if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.PS, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.PS, no flags"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ps"), obj.PS, safe.Field(oldObj, func(oldObj *T03) *string { return oldObj.PS }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T03) *string { + return oldObj.PS + }) + errs = append(errs, fn(fldPath.Child("ps"), obj.PS, oldVal, oldObj != nil)...) + } - // field T03.T - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T03.T + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -344,18 +531,30 @@ func Validate_T03(ctx context.Context, op operation.Operation, fldPath *field.Pa if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.T, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.T, no flags"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t"), &obj.T, safe.Field(oldObj, func(oldObj *T03) *Tother { return &oldObj.T }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T03) *Tother { + return &oldObj.T + }) + errs = append(errs, fn(fldPath.Child("t"), &obj.T, oldVal, oldObj != nil)...) + } - // field T03.PT - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T03.PT + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -366,18 +565,29 @@ func Validate_T03(ctx context.Context, op operation.Operation, fldPath *field.Pa if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.PT, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T03.PT, no flags"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt"), obj.PT, safe.Field(oldObj, func(oldObj *T03) *Tother { return oldObj.PT }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T03) *Tother { + return oldObj.PT + }) + errs = append(errs, fn(fldPath.Child("pt"), obj.PT, oldVal, oldObj != nil)...) + } return errs } // Validate_TMultiple validates an instance of TMultiple according // to declarative validation rules in the API schema. -func Validate_TMultiple(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *TMultiple) (errs field.ErrorList) { +func Validate_TMultiple( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *TMultiple) (errs field.ErrorList) { + earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple, ShortCircuit 1"); len(e) != 0 { errs = append(errs, e...) @@ -390,18 +600,28 @@ func Validate_TMultiple(ctx context.Context, op operation.Operation, fldPath *fi if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple, no flags 1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple, no flags 2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple, no flags 1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple, no flags 2"); len(e) != 0 { + errs = append(errs, e...) + } // field TMultiple.TypeMeta has no validation - // field TMultiple.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field TMultiple.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -416,18 +636,34 @@ func Validate_TMultiple(ctx context.Context, op operation.Operation, fldPath *fi if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.S, no flags 1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.S, no flags 2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.S, no flags 1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.S, no flags 2"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *TMultiple) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *TMultiple) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field TMultiple.PS - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field TMultiple.PS + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -442,18 +678,34 @@ func Validate_TMultiple(ctx context.Context, op operation.Operation, fldPath *fi if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PS, no flags 1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PS, no flags 2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PS, no flags 1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PS, no flags 2"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ps"), obj.PS, safe.Field(oldObj, func(oldObj *TMultiple) *string { return oldObj.PS }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *TMultiple) *string { + return oldObj.PS + }) + errs = append(errs, fn(fldPath.Child("ps"), obj.PS, oldVal, oldObj != nil)...) + } - // field TMultiple.T - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field TMultiple.T + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -468,20 +720,36 @@ func Validate_TMultiple(ctx context.Context, op operation.Operation, fldPath *fi if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.T, no flags 1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.T, no flags 2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.T, no flags 1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.T, no flags 2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t"), &obj.T, safe.Field(oldObj, func(oldObj *TMultiple) *Tother { return &oldObj.T }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *TMultiple) *Tother { + return &oldObj.T + }) + errs = append(errs, fn(fldPath.Child("t"), &obj.T, oldVal, oldObj != nil)...) + } - // field TMultiple.PT - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Tother, oldValueCorrelated bool) (errs field.ErrorList) { + { // field TMultiple.PT + fn := func( + fldPath *field.Path, + obj, oldObj *Tother, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -496,31 +764,58 @@ func Validate_TMultiple(ctx context.Context, op operation.Operation, fldPath *fi if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PT, no flags 1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PT, no flags 2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PT, no flags 1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "T0, string payload"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "TMultiple.PT, no flags 2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_Tother(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt"), obj.PT, safe.Field(oldObj, func(oldObj *TMultiple) *Tother { return oldObj.PT }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *TMultiple) *Tother { + return oldObj.PT + }) + errs = append(errs, fn(fldPath.Child("pt"), obj.PT, oldVal, oldObj != nil)...) + } return errs } // Validate_Tother validates an instance of Tother according // to declarative validation rules in the API schema. -func Validate_Tother(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Tother) (errs field.ErrorList) { - // field Tother.OS - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_Tother( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Tother) (errs field.ErrorList) { + + { // field Tother.OS + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Tother, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Tother, no flags"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("os"), &obj.OS, safe.Field(oldObj, func(oldObj *Tother) *string { return &oldObj.OS }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Tother) *string { + return &oldObj.OS + }) + errs = append(errs, fn(fldPath.Child("os"), &obj.OS, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/typedefs/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/typedefs/zz_generated.validations.go index a0df0df4593..410fcbab544 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/typedefs/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ordering/typedefs/zz_generated.validations.go @@ -38,51 +38,87 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type E01 - scheme.AddValidationFunc((*E01)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_E01(ctx, op, nil /* fldPath */, obj.(*E01), safe.Cast[*E01](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*E01)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_E01( + ctx, op, nil, /* fldPath */ + obj.(*E01), + safe.Cast[*E01](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type E02 - scheme.AddValidationFunc((*E02)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_E02(ctx, op, nil /* fldPath */, obj.(*E02), safe.Cast[*E02](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*E02)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_E02( + ctx, op, nil, /* fldPath */ + obj.(*E02), + safe.Cast[*E02](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type E03 - scheme.AddValidationFunc((*E03)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_E03(ctx, op, nil /* fldPath */, obj.(*E03), safe.Cast[*E03](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*E03)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_E03( + ctx, op, nil, /* fldPath */ + obj.(*E03), + safe.Cast[*E03](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type EMultiple - scheme.AddValidationFunc((*EMultiple)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_EMultiple(ctx, op, nil /* fldPath */, obj.(*EMultiple), safe.Cast[*EMultiple](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*EMultiple)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_EMultiple( + ctx, op, nil, /* fldPath */ + obj.(*EMultiple), + safe.Cast[*EMultiple](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_E01 validates an instance of E01 according // to declarative validation rules in the API schema. -func Validate_E01(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E01) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E01, no flags")...) +func Validate_E01( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E01) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E01, no flags"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_E02 validates an instance of E02 according // to declarative validation rules in the API schema. -func Validate_E02(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E02) (errs field.ErrorList) { +func Validate_E02( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E02) (errs field.ErrorList) { + earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E02, ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -97,7 +133,10 @@ func Validate_E02(ctx context.Context, op operation.Operation, fldPath *field.Pa // Validate_E03 validates an instance of E03 according // to declarative validation rules in the API schema. -func Validate_E03(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E03) (errs field.ErrorList) { +func Validate_E03( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E03) (errs field.ErrorList) { + earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E03, ShortCircuit"); len(e) != 0 { errs = append(errs, e...) @@ -106,14 +145,19 @@ func Validate_E03(ctx context.Context, op operation.Operation, fldPath *field.Pa if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E03, no flags")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E03, no flags"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_EMultiple validates an instance of EMultiple according // to declarative validation rules in the API schema. -func Validate_EMultiple(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *EMultiple) (errs field.ErrorList) { +func Validate_EMultiple( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *EMultiple) (errs field.ErrorList) { + earlyReturn := false if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "EMultiple, ShortCircuit 1"); len(e) != 0 { errs = append(errs, e...) @@ -126,9 +170,15 @@ func Validate_EMultiple(ctx context.Context, op operation.Operation, fldPath *fi if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "EMultiple, no flags 1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E0, string payload")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "EMultiple, no flags 2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "EMultiple, no flags 1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "E0, string payload"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "EMultiple, no flags 2"); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/pointers/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/pointers/zz_generated.validations.go index 880be40681e..ae10feeeb3c 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/pointers/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/pointers/zz_generated.validations.go @@ -39,82 +39,152 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + // field T1.TypeMeta has no validation - // field T1.PS - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PS + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PS")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PS"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("ps"), obj.PS, safe.Field(oldObj, func(oldObj *T1) *string { return oldObj.PS }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return oldObj.PS + }) + errs = append(errs, fn(fldPath.Child("ps"), obj.PS, oldVal, oldObj != nil)...) + } - // field T1.PI - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PI + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PI")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PI"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pi"), obj.PI, safe.Field(oldObj, func(oldObj *T1) *int { return oldObj.PI }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *int { + return oldObj.PI + }) + errs = append(errs, fn(fldPath.Child("pi"), obj.PI, oldVal, oldObj != nil)...) + } - // field T1.PB - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PB + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PB")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PB"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pb"), obj.PB, safe.Field(oldObj, func(oldObj *T1) *bool { return oldObj.PB }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *bool { + return oldObj.PB + }) + errs = append(errs, fn(fldPath.Child("pb"), obj.PB, oldVal, oldObj != nil)...) + } - // field T1.PF - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PF + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PF")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PF"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pf"), obj.PF, safe.Field(oldObj, func(oldObj *T1) *float64 { return oldObj.PF }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *float64 { + return oldObj.PF + }) + errs = append(errs, fn(fldPath.Child("pf"), obj.PF, oldVal, oldObj != nil)...) + } - // field T1.PT2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PT2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PT2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PT2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt2"), obj.PT2, safe.Field(oldObj, func(oldObj *T1) *T2 { return oldObj.PT2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return oldObj.PT2 + }) + errs = append(errs, fn(fldPath.Child("pt2"), obj.PT2, oldVal, oldObj != nil)...) + } // field T1.AnotherPS has no validation // field T1.AnotherPI has no validation @@ -125,54 +195,105 @@ func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Pat // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.PS - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil - } - // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PS")...) - return - }(fldPath.Child("ps"), obj.PS, safe.Field(oldObj, func(oldObj *T2) *string { return oldObj.PS }), oldObj != nil)...) +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { - // field T2.PI - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.PS + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PI")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PS"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pi"), obj.PI, safe.Field(oldObj, func(oldObj *T2) *int { return oldObj.PI }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *string { + return oldObj.PS + }) + errs = append(errs, fn(fldPath.Child("ps"), obj.PS, oldVal, oldObj != nil)...) + } - // field T2.PB - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.PI + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PB")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PI"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pb"), obj.PB, safe.Field(oldObj, func(oldObj *T2) *bool { return oldObj.PB }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *int { + return oldObj.PI + }) + errs = append(errs, fn(fldPath.Child("pi"), obj.PI, oldVal, oldObj != nil)...) + } - // field T2.PF - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.PB + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PF")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PB"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pf"), obj.PF, safe.Field(oldObj, func(oldObj *T2) *float64 { return oldObj.PF }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *bool { + return oldObj.PB + }) + errs = append(errs, fn(fldPath.Child("pb"), obj.PB, oldVal, oldObj != nil)...) + } + + { // field T2.PF + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } + } + // call field-attached validations + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.PF"); len(e) != 0 { + errs = append(errs, e...) + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *float64 { + return oldObj.PF + }) + errs = append(errs, fn(fldPath.Child("pf"), obj.PF, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/primitives/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/primitives/zz_generated.validations.go index d816e69df47..5a6620c4cb8 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/primitives/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/primitives/zz_generated.validations.go @@ -38,82 +38,152 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + // field T1.TypeMeta has no validation - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field T1.I - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.I + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.I")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.I"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("i"), &obj.I, safe.Field(oldObj, func(oldObj *T1) *int { return &oldObj.I }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *int { + return &oldObj.I + }) + errs = append(errs, fn(fldPath.Child("i"), &obj.I, oldVal, oldObj != nil)...) + } - // field T1.B - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.B + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.B")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.B"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("b"), &obj.B, safe.Field(oldObj, func(oldObj *T1) *bool { return &oldObj.B }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *bool { + return &oldObj.B + }) + errs = append(errs, fn(fldPath.Child("b"), &obj.B, oldVal, oldObj != nil)...) + } - // field T1.F - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.F + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.F")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.F"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("f"), &obj.F, safe.Field(oldObj, func(oldObj *T1) *float64 { return &oldObj.F }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *float64 { + return &oldObj.F + }) + errs = append(errs, fn(fldPath.Child("f"), &obj.F, oldVal, oldObj != nil)...) + } - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } // field T1.T3 has no validation // field T1.AnotherS has no validation @@ -121,71 +191,132 @@ func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Pat // field T1.AnotherB has no validation // field T1.AnotherF has no validation - // field T1.AnotherT2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.AnotherT2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("anothert2"), &obj.AnotherT2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.AnotherT2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.AnotherT2 + }) + errs = append(errs, fn(fldPath.Child("anothert2"), &obj.AnotherT2, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil - } - // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S")...) - return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T2) *string { return &oldObj.S }), oldObj != nil)...) +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { - // field T2.I - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.I")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("i"), &obj.I, safe.Field(oldObj, func(oldObj *T2) *int { return &oldObj.I }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field T2.B - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.I + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.B")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.I"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("b"), &obj.B, safe.Field(oldObj, func(oldObj *T2) *bool { return &oldObj.B }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *int { + return &oldObj.I + }) + errs = append(errs, fn(fldPath.Child("i"), &obj.I, oldVal, oldObj != nil)...) + } - // field T2.F - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.B + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.F")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.B"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("f"), &obj.F, safe.Field(oldObj, func(oldObj *T2) *float64 { return &oldObj.F }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *bool { + return &oldObj.B + }) + errs = append(errs, fn(fldPath.Child("b"), &obj.B, oldVal, oldObj != nil)...) + } + + { // field T2.F + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } + } + // call field-attached validations + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.F"); len(e) != 0 { + errs = append(errs, e...) + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *float64 { + return &oldObj.F + }) + errs = append(errs, fn(fldPath.Child("f"), &obj.F, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/public_private/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/public_private/zz_generated.validations.go index bddbacfaff5..0a00b42c7f5 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/public_private/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/public_private/zz_generated.validations.go @@ -38,30 +38,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.Public - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.Public + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.Public")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.Public"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("public"), &obj.Public, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.Public }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.Public + }) + errs = append(errs, fn(fldPath.Child("public"), &obj.Public, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/default_behavior/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/default_behavior/zz_generated.validations.go index 70526d231f9..6becd2134c5 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/default_behavior/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/default_behavior/zz_generated.validations.go @@ -39,356 +39,622 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type MixComparableStruct - scheme.AddValidationFunc((*MixComparableStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MixComparableStruct(ctx, op, nil /* fldPath */, obj.(*MixComparableStruct), safe.Cast[*MixComparableStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MixComparableStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MixComparableStruct( + ctx, op, nil, /* fldPath */ + obj.(*MixComparableStruct), + safe.Cast[*MixComparableStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructEmbedded - scheme.AddValidationFunc((*StructEmbedded)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructEmbedded(ctx, op, nil /* fldPath */, obj.(*StructEmbedded), safe.Cast[*StructEmbedded](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructEmbedded)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructEmbedded( + ctx, op, nil, /* fldPath */ + obj.(*StructEmbedded), + safe.Cast[*StructEmbedded](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructMap - scheme.AddValidationFunc((*StructMap)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructMap(ctx, op, nil /* fldPath */, obj.(*StructMap), safe.Cast[*StructMap](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructMap)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructMap( + ctx, op, nil, /* fldPath */ + obj.(*StructMap), + safe.Cast[*StructMap](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructPrimitive - scheme.AddValidationFunc((*StructPrimitive)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructPrimitive(ctx, op, nil /* fldPath */, obj.(*StructPrimitive), safe.Cast[*StructPrimitive](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructPrimitive)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructPrimitive( + ctx, op, nil, /* fldPath */ + obj.(*StructPrimitive), + safe.Cast[*StructPrimitive](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructSlice - scheme.AddValidationFunc((*StructSlice)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructSlice(ctx, op, nil /* fldPath */, obj.(*StructSlice), safe.Cast[*StructSlice](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructSlice)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructSlice( + ctx, op, nil, /* fldPath */ + obj.(*StructSlice), + safe.Cast[*StructSlice](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructStruct - scheme.AddValidationFunc((*StructStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructStruct(ctx, op, nil /* fldPath */, obj.(*StructStruct), safe.Cast[*StructStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructStruct( + ctx, op, nil, /* fldPath */ + obj.(*StructStruct), + safe.Cast[*StructStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_AliasMapKeyType validates an instance of AliasMapKeyType according // to declarative validation rules in the API schema. -func Validate_AliasMapKeyType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj AliasMapKeyType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapKeyType")...) +func Validate_AliasMapKeyType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj AliasMapKeyType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapKeyType"); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the key type's validation function - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_S)...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_S); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_AliasMapValueType validates an instance of AliasMapValueType according // to declarative validation rules in the API schema. -func Validate_AliasMapValueType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj AliasMapValueType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapValueType")...) +func Validate_AliasMapValueType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj AliasMapValueType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapValueType"); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_S)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_S); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_DirectComparableStruct validates an instance of DirectComparableStruct according // to declarative validation rules in the API schema. -func Validate_DirectComparableStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DirectComparableStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type DirectComparableStruct")...) +func Validate_DirectComparableStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *DirectComparableStruct) (errs field.ErrorList) { - // field DirectComparableStruct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type DirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field DirectComparableStruct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *DirectComparableStruct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *DirectComparableStruct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } return errs } // Validate_MixComparableStruct validates an instance of MixComparableStruct according // to declarative validation rules in the API schema. -func Validate_MixComparableStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixComparableStruct) (errs field.ErrorList) { +func Validate_MixComparableStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MixComparableStruct) (errs field.ErrorList) { + // field MixComparableStruct.TypeMeta has no validation // field MixComparableStruct.Primitive has no validation - // field MixComparableStruct.NonComparable - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MixComparableStruct.NonComparable + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NonComparable")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NonComparable"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("NonComparable"), obj.NonComparable, safe.Field(oldObj, func(oldObj *MixComparableStruct) []string { return oldObj.NonComparable }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MixComparableStruct) []string { + return oldObj.NonComparable + }) + errs = append(errs, fn(fldPath.Child("NonComparable"), obj.NonComparable, oldVal, oldObj != nil)...) + } return errs } // Validate_MySlice validates an instance of MySlice according // to declarative validation rules in the API schema. -func Validate_MySlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MySlice) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MySlice")...) +func Validate_MySlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj MySlice) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MySlice"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_NestedDirectComparableStruct validates an instance of NestedDirectComparableStruct according // to declarative validation rules in the API schema. -func Validate_NestedDirectComparableStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NestedDirectComparableStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NestedDirectComparableStruct")...) +func Validate_NestedDirectComparableStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NestedDirectComparableStruct) (errs field.ErrorList) { - // field NestedDirectComparableStruct.DirectComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *DirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NestedDirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field NestedDirectComparableStruct.DirectComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj *DirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field directComparableStructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field directComparableStructField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_DirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("directComparableStructField"), &obj.DirectComparableStructField, safe.Field(oldObj, func(oldObj *NestedDirectComparableStruct) *DirectComparableStruct { - return &oldObj.DirectComparableStructField - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NestedDirectComparableStruct) *DirectComparableStruct { + return &oldObj.DirectComparableStructField + }) + errs = append(errs, fn(fldPath.Child("directComparableStructField"), &obj.DirectComparableStructField, oldVal, oldObj != nil)...) + } return errs } // Validate_NestedNonDirectComparableStruct validates an instance of NestedNonDirectComparableStruct according // to declarative validation rules in the API schema. -func Validate_NestedNonDirectComparableStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NestedNonDirectComparableStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NestedNonDirectComparableStruct")...) +func Validate_NestedNonDirectComparableStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NestedNonDirectComparableStruct) (errs field.ErrorList) { - // field NestedNonDirectComparableStruct.NonDirectComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonDirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NestedNonDirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field NestedNonDirectComparableStruct.NonDirectComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj *NonDirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field nonDirectComparableStructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field nonDirectComparableStructField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_NonDirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nonDirectComparableStructField"), &obj.NonDirectComparableStructField, safe.Field(oldObj, func(oldObj *NestedNonDirectComparableStruct) *NonDirectComparableStruct { - return &oldObj.NonDirectComparableStructField - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NestedNonDirectComparableStruct) *NonDirectComparableStruct { + return &oldObj.NonDirectComparableStructField + }) + errs = append(errs, fn(fldPath.Child("nonDirectComparableStructField"), &obj.NonDirectComparableStructField, oldVal, oldObj != nil)...) + } return errs } // Validate_NonDirectComparableStruct validates an instance of NonDirectComparableStruct according // to declarative validation rules in the API schema. -func Validate_NonDirectComparableStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonDirectComparableStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NonDirectComparableStruct")...) +func Validate_NonDirectComparableStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NonDirectComparableStruct) (errs field.ErrorList) { - // field NonDirectComparableStruct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NonDirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field NonDirectComparableStruct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intPtrField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *NonDirectComparableStruct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *NonDirectComparableStruct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } return errs } // Validate_S validates an instance of S according // to declarative validation rules in the API schema. -func Validate_S(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *S) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type S")...) +func Validate_S( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *S) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type S"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_StructEmbedded validates an instance of StructEmbedded according // to declarative validation rules in the API schema. -func Validate_StructEmbedded(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructEmbedded) (errs field.ErrorList) { +func Validate_StructEmbedded( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructEmbedded) (errs field.ErrorList) { + // field StructEmbedded.TypeMeta has no validation - // field StructEmbedded.DirectComparableStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *DirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructEmbedded.DirectComparableStruct + fn := func( + fldPath *field.Path, + obj, oldObj *DirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field DirectComparableStruct")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field DirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_DirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("directComparableStruct"), &obj.DirectComparableStruct, safe.Field(oldObj, func(oldObj *StructEmbedded) *DirectComparableStruct { return &oldObj.DirectComparableStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructEmbedded) *DirectComparableStruct { + return &oldObj.DirectComparableStruct + }) + errs = append(errs, fn(fldPath.Child("directComparableStruct"), &obj.DirectComparableStruct, oldVal, oldObj != nil)...) + } - // field StructEmbedded.NonDirectComparableStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonDirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructEmbedded.NonDirectComparableStruct + fn := func( + fldPath *field.Path, + obj, oldObj *NonDirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NonDirectComparableStruct")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NonDirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_NonDirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nonDirectComparableStruct"), &obj.NonDirectComparableStruct, safe.Field(oldObj, func(oldObj *StructEmbedded) *NonDirectComparableStruct { return &oldObj.NonDirectComparableStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructEmbedded) *NonDirectComparableStruct { + return &oldObj.NonDirectComparableStruct + }) + errs = append(errs, fn(fldPath.Child("nonDirectComparableStruct"), &obj.NonDirectComparableStruct, oldVal, oldObj != nil)...) + } - // field StructEmbedded.NestedDirectComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NestedDirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructEmbedded.NestedDirectComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj *NestedDirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NestedDirectComparableStructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NestedDirectComparableStructField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_NestedDirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nestedDirectComparableStructField"), &obj.NestedDirectComparableStructField, safe.Field(oldObj, func(oldObj *StructEmbedded) *NestedDirectComparableStruct { - return &oldObj.NestedDirectComparableStructField - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructEmbedded) *NestedDirectComparableStruct { + return &oldObj.NestedDirectComparableStructField + }) + errs = append(errs, fn(fldPath.Child("nestedDirectComparableStructField"), &obj.NestedDirectComparableStructField, oldVal, oldObj != nil)...) + } - // field StructEmbedded.NestedNonDirectComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NestedNonDirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructEmbedded.NestedNonDirectComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj *NestedNonDirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NestedNonDirectComparableStructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NestedNonDirectComparableStructField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_NestedNonDirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nestedNonDirectComparableStructField"), &obj.NestedNonDirectComparableStructField, safe.Field(oldObj, func(oldObj *StructEmbedded) *NestedNonDirectComparableStruct { - return &oldObj.NestedNonDirectComparableStructField - }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructEmbedded) *NestedNonDirectComparableStruct { + return &oldObj.NestedNonDirectComparableStructField + }) + errs = append(errs, fn(fldPath.Child("nestedNonDirectComparableStructField"), &obj.NestedNonDirectComparableStructField, oldVal, oldObj != nil)...) + } return errs } // Validate_StructMap validates an instance of StructMap according // to declarative validation rules in the API schema. -func Validate_StructMap(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructMap) (errs field.ErrorList) { +func Validate_StructMap( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructMap) (errs field.ErrorList) { + // field StructMap.TypeMeta has no validation - // field StructMap.MapKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[S]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructMap.MapKeyField + fn := func( + fldPath *field.Path, + obj, oldObj map[S]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field mapKeyField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field mapKeyField"); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the key type's validation function - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_S)...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_S); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapKeyField"), obj.MapKeyField, safe.Field(oldObj, func(oldObj *StructMap) map[S]string { return oldObj.MapKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructMap) map[S]string { + return oldObj.MapKeyField + }) + errs = append(errs, fn(fldPath.Child("mapKeyField"), obj.MapKeyField, oldVal, oldObj != nil)...) + } - // field StructMap.MapValueField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]S, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructMap.MapValueField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]S, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field mapValueField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field mapValueField"); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_S)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_S); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapValueField"), obj.MapValueField, safe.Field(oldObj, func(oldObj *StructMap) map[string]S { return oldObj.MapValueField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructMap) map[string]S { + return oldObj.MapValueField + }) + errs = append(errs, fn(fldPath.Child("mapValueField"), obj.MapValueField, oldVal, oldObj != nil)...) + } - // field StructMap.AliasMapKeyTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj AliasMapKeyType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructMap.AliasMapKeyTypeField + fn := func( + fldPath *field.Path, + obj, oldObj AliasMapKeyType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field aliasMapKeyTypeField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field aliasMapKeyTypeField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_AliasMapKeyType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("aliasMapKeyTypeField"), obj.AliasMapKeyTypeField, safe.Field(oldObj, func(oldObj *StructMap) AliasMapKeyType { return oldObj.AliasMapKeyTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructMap) AliasMapKeyType { + return oldObj.AliasMapKeyTypeField + }) + errs = append(errs, fn(fldPath.Child("aliasMapKeyTypeField"), obj.AliasMapKeyTypeField, oldVal, oldObj != nil)...) + } - // field StructMap.AliasMapValueTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj AliasMapValueType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructMap.AliasMapValueTypeField + fn := func( + fldPath *field.Path, + obj, oldObj AliasMapValueType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field aliasMapValueTypeField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field aliasMapValueTypeField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_AliasMapValueType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("aliasMapValueTypeField"), obj.AliasMapValueTypeField, safe.Field(oldObj, func(oldObj *StructMap) AliasMapValueType { return oldObj.AliasMapValueTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructMap) AliasMapValueType { + return oldObj.AliasMapValueTypeField + }) + errs = append(errs, fn(fldPath.Child("aliasMapValueTypeField"), obj.AliasMapValueTypeField, oldVal, oldObj != nil)...) + } return errs } // Validate_StructPrimitive validates an instance of StructPrimitive according // to declarative validation rules in the API schema. -func Validate_StructPrimitive(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructPrimitive) (errs field.ErrorList) { +func Validate_StructPrimitive( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructPrimitive) (errs field.ErrorList) { + // field StructPrimitive.TypeMeta has no validation - // field StructPrimitive.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructPrimitive.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *StructPrimitive) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructPrimitive) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field StructPrimitive.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructPrimitive.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -398,137 +664,249 @@ func Validate_StructPrimitive(ctx context.Context, op operation.Operation, fldPa if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field intPtrField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *StructPrimitive) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructPrimitive) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } return errs } // Validate_StructSlice validates an instance of StructSlice according // to declarative validation rules in the API schema. -func Validate_StructSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructSlice) (errs field.ErrorList) { +func Validate_StructSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructSlice) (errs field.ErrorList) { + // field StructSlice.TypeMeta has no validation - // field StructSlice.SliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []S, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.SliceField + fn := func( + fldPath *field.Path, + obj, oldObj []S, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field sliceField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field sliceField"); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_S)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_S); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceField"), obj.SliceField, safe.Field(oldObj, func(oldObj *StructSlice) []S { return oldObj.SliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []S { + return oldObj.SliceField + }) + errs = append(errs, fn(fldPath.Child("sliceField"), obj.SliceField, oldVal, oldObj != nil)...) + } - // field StructSlice.TypeDefSliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MySlice, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.TypeDefSliceField + fn := func( + fldPath *field.Path, + obj, oldObj MySlice, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field typedefSliceField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field typedefSliceField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_MySlice(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefSliceField"), obj.TypeDefSliceField, safe.Field(oldObj, func(oldObj *StructSlice) MySlice { return oldObj.TypeDefSliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) MySlice { + return oldObj.TypeDefSliceField + }) + errs = append(errs, fn(fldPath.Child("typedefSliceField"), obj.TypeDefSliceField, oldVal, oldObj != nil)...) + } return errs } // Validate_StructStruct validates an instance of StructStruct according // to declarative validation rules in the API schema. -func Validate_StructStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructStruct) (errs field.ErrorList) { +func Validate_StructStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructStruct) (errs field.ErrorList) { + // field StructStruct.TypeMeta has no validation - // field StructStruct.DirectComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *DirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructStruct.DirectComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj *DirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field directComparableStructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field directComparableStructField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_DirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("directComparableStructField"), &obj.DirectComparableStructField, safe.Field(oldObj, func(oldObj *StructStruct) *DirectComparableStruct { return &oldObj.DirectComparableStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructStruct) *DirectComparableStruct { + return &oldObj.DirectComparableStructField + }) + errs = append(errs, fn(fldPath.Child("directComparableStructField"), &obj.DirectComparableStructField, oldVal, oldObj != nil)...) + } - // field StructStruct.NonDirectComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonDirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructStruct.NonDirectComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj *NonDirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field nonDirectComparableStructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field nonDirectComparableStructField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_NonDirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nonDirectComparableStructField"), &obj.NonDirectComparableStructField, safe.Field(oldObj, func(oldObj *StructStruct) *NonDirectComparableStruct { return &oldObj.NonDirectComparableStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructStruct) *NonDirectComparableStruct { + return &oldObj.NonDirectComparableStructField + }) + errs = append(errs, fn(fldPath.Child("nonDirectComparableStructField"), &obj.NonDirectComparableStructField, oldVal, oldObj != nil)...) + } - // field StructStruct.DirectComparableStructPtr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *DirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructStruct.DirectComparableStructPtr + fn := func( + fldPath *field.Path, + obj, oldObj *DirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field directComparableStructPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field directComparableStructPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_DirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("directComparableStructPtrField"), obj.DirectComparableStructPtr, safe.Field(oldObj, func(oldObj *StructStruct) *DirectComparableStruct { return oldObj.DirectComparableStructPtr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructStruct) *DirectComparableStruct { + return oldObj.DirectComparableStructPtr + }) + errs = append(errs, fn(fldPath.Child("directComparableStructPtrField"), obj.DirectComparableStructPtr, oldVal, oldObj != nil)...) + } - // field StructStruct.NonDirectComparableStructPtr - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonDirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructStruct.NonDirectComparableStructPtr + fn := func( + fldPath *field.Path, + obj, oldObj *NonDirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field nonDirectComparableStructPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field nonDirectComparableStructPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_NonDirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nonDirectComparableStructPtrField"), obj.NonDirectComparableStructPtr, safe.Field(oldObj, func(oldObj *StructStruct) *NonDirectComparableStruct { return oldObj.NonDirectComparableStructPtr }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructStruct) *NonDirectComparableStruct { + return oldObj.NonDirectComparableStructPtr + }) + errs = append(errs, fn(fldPath.Child("nonDirectComparableStructPtrField"), obj.NonDirectComparableStructPtr, oldVal, oldObj != nil)...) + } - // field StructStruct.DirectComparableStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *DirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructStruct.DirectComparableStruct + fn := func( + fldPath *field.Path, + obj, oldObj *DirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field DirectComparableStruct")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field DirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_DirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("DirectComparableStruct") }), &obj.DirectComparableStruct, safe.Field(oldObj, func(oldObj *StructStruct) *DirectComparableStruct { return &oldObj.DirectComparableStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructStruct) *DirectComparableStruct { + return &oldObj.DirectComparableStruct + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("DirectComparableStruct") }), &obj.DirectComparableStruct, oldVal, oldObj != nil)...) + } - // field StructStruct.NonDirectComparableStruct - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonDirectComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructStruct.NonDirectComparableStruct + fn := func( + fldPath *field.Path, + obj, oldObj *NonDirectComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NonDirectComparableStruct")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field NonDirectComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_NonDirectComparableStruct(ctx, op, fldPath, obj, oldObj)...) return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("NonDirectComparableStruct") }), &obj.NonDirectComparableStruct, safe.Field(oldObj, func(oldObj *StructStruct) *NonDirectComparableStruct { return &oldObj.NonDirectComparableStruct }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructStruct) *NonDirectComparableStruct { + return &oldObj.NonDirectComparableStruct + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("NonDirectComparableStruct") }), &obj.NonDirectComparableStruct, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/list/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/list/zz_generated.validations.go index 93c0d8aa1bd..842f3252f46 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/list/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/list/zz_generated.validations.go @@ -39,71 +39,124 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ItemList - scheme.AddValidationFunc((*ItemList)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ItemList(ctx, op, nil /* fldPath */, obj.(*ItemList), safe.Cast[*ItemList](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ItemList)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ItemList( + ctx, op, nil, /* fldPath */ + obj.(*ItemList), + safe.Cast[*ItemList](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructSlice - scheme.AddValidationFunc((*StructSlice)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructSlice(ctx, op, nil /* fldPath */, obj.(*StructSlice), safe.Cast[*StructSlice](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructSlice)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructSlice( + ctx, op, nil, /* fldPath */ + obj.(*StructSlice), + safe.Cast[*StructSlice](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Item validates an instance of Item according // to declarative validation rules in the API schema. -func Validate_Item(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) (errs field.ErrorList) { +func Validate_Item( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Item) (errs field.ErrorList) { + // field Item.Key has no validation - // field Item.Data - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Item.Data + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Data")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Data"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("data"), obj.Data, safe.Field(oldObj, func(oldObj *Item) map[string]string { return oldObj.Data }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Item) map[string]string { + return oldObj.Data + }) + errs = append(errs, fn(fldPath.Child("data"), obj.Data, oldVal, oldObj != nil)...) + } return errs } // Validate_ItemList validates an instance of ItemList according // to declarative validation rules in the API schema. -func Validate_ItemList(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ItemList) (errs field.ErrorList) { +func Validate_ItemList( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ItemList) (errs field.ErrorList) { + // field ItemList.TypeMeta has no validation - // field ItemList.Items - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ItemList.Items + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key }, validate.SemanticDeepEqual, Validate_Item)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }, validate.SemanticDeepEqual, Validate_Item); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("items"), obj.Items, safe.Field(oldObj, func(oldObj *ItemList) []Item { return oldObj.Items }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ItemList) []Item { + return oldObj.Items + }) + errs = append(errs, fn(fldPath.Child("items"), obj.Items, oldVal, oldObj != nil)...) + } return errs } // Validate_MixedKeyStruct validates an instance of MixedKeyStruct according // to declarative validation rules in the API schema. -func Validate_MixedKeyStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedKeyStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MixedKeyStruct")...) +func Validate_MixedKeyStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MixedKeyStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MixedKeyStruct"); len(e) != 0 { + errs = append(errs, e...) + } // field MixedKeyStruct.Key1 has no validation // field MixedKeyStruct.Key2 has no validation @@ -113,8 +166,13 @@ func Validate_MixedKeyStruct(ctx context.Context, op operation.Operation, fldPat // Validate_NonComparableStruct validates an instance of NonComparableStruct according // to declarative validation rules in the API schema. -func Validate_NonComparableStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NonComparableStruct")...) +func Validate_NonComparableStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NonComparableStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NonComparableStruct"); len(e) != 0 { + errs = append(errs, e...) + } // field NonComparableStruct.IntPtrField has no validation return errs @@ -122,8 +180,13 @@ func Validate_NonComparableStruct(ctx context.Context, op operation.Operation, f // Validate_NonComparableStructWithKey validates an instance of NonComparableStructWithKey according // to declarative validation rules in the API schema. -func Validate_NonComparableStructWithKey(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStructWithKey) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NonComparableStructWithKey")...) +func Validate_NonComparableStructWithKey( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NonComparableStructWithKey) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type NonComparableStructWithKey"); len(e) != 0 { + errs = append(errs, e...) + } // field NonComparableStructWithKey.Key has no validation // field NonComparableStructWithKey.IntPtrField has no validation @@ -132,8 +195,13 @@ func Validate_NonComparableStructWithKey(ctx context.Context, op operation.Opera // Validate_PtrKeyStruct validates an instance of PtrKeyStruct according // to declarative validation rules in the API schema. -func Validate_PtrKeyStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrKeyStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type PtrKeyStruct")...) +func Validate_PtrKeyStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *PtrKeyStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type PtrKeyStruct"); len(e) != 0 { + errs = append(errs, e...) + } // field PtrKeyStruct.Key has no validation // field PtrKeyStruct.Data has no validation @@ -142,182 +210,348 @@ func Validate_PtrKeyStruct(ctx context.Context, op operation.Operation, fldPath // Validate_StructSlice validates an instance of StructSlice according // to declarative validation rules in the API schema. -func Validate_StructSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructSlice) (errs field.ErrorList) { +func Validate_StructSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructSlice) (errs field.ErrorList) { + // field StructSlice.TypeMeta has no validation - // field StructSlice.AtomicSliceStringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.AtomicSliceStringField + fn := func( + fldPath *field.Path, + obj, oldObj []StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceStringField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceStringField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicSliceStringField"), obj.AtomicSliceStringField, safe.Field(oldObj, func(oldObj *StructSlice) []StringType { return oldObj.AtomicSliceStringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []StringType { + return oldObj.AtomicSliceStringField + }) + errs = append(errs, fn(fldPath.Child("atomicSliceStringField"), obj.AtomicSliceStringField, oldVal, oldObj != nil)...) + } - // field StructSlice.AtomicSliceTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj IntSliceType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.AtomicSliceTypeField + fn := func( + fldPath *field.Path, + obj, oldObj IntSliceType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceTypeField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceTypeField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicSliceTypeField"), obj.AtomicSliceTypeField, safe.Field(oldObj, func(oldObj *StructSlice) IntSliceType { return oldObj.AtomicSliceTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) IntSliceType { + return oldObj.AtomicSliceTypeField + }) + errs = append(errs, fn(fldPath.Child("atomicSliceTypeField"), obj.AtomicSliceTypeField, oldVal, oldObj != nil)...) + } - // field StructSlice.AtomicSliceComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.AtomicSliceComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicSliceComparableField"), obj.AtomicSliceComparableField, safe.Field(oldObj, func(oldObj *StructSlice) []ComparableStruct { return oldObj.AtomicSliceComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []ComparableStruct { + return oldObj.AtomicSliceComparableField + }) + errs = append(errs, fn(fldPath.Child("atomicSliceComparableField"), obj.AtomicSliceComparableField, oldVal, oldObj != nil)...) + } - // field StructSlice.AtomicSliceNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.AtomicSliceNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceNonComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field AtomicSliceNonComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NonComparableStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_NonComparableStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicSliceNonComparableField"), obj.AtomicSliceNonComparableField, safe.Field(oldObj, func(oldObj *StructSlice) []NonComparableStruct { return oldObj.AtomicSliceNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []NonComparableStruct { + return oldObj.AtomicSliceNonComparableField + }) + errs = append(errs, fn(fldPath.Child("atomicSliceNonComparableField"), obj.AtomicSliceNonComparableField, oldVal, oldObj != nil)...) + } - // field StructSlice.SetSliceComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.SetSliceComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field SetSliceComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field SetSliceComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("setSliceComparableField"), obj.SetSliceComparableField, safe.Field(oldObj, func(oldObj *StructSlice) []ComparableStruct { return oldObj.SetSliceComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []ComparableStruct { + return oldObj.SetSliceComparableField + }) + errs = append(errs, fn(fldPath.Child("setSliceComparableField"), obj.SetSliceComparableField, oldVal, oldObj != nil)...) + } - // field StructSlice.SetSliceNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.SetSliceNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field SetSliceNonComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field SetSliceNonComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, nil, Validate_NonComparableStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, nil, Validate_NonComparableStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("setSliceNonComparableField"), obj.SetSliceNonComparableField, safe.Field(oldObj, func(oldObj *StructSlice) []NonComparableStruct { return oldObj.SetSliceNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []NonComparableStruct { + return oldObj.SetSliceNonComparableField + }) + errs = append(errs, fn(fldPath.Child("setSliceNonComparableField"), obj.SetSliceNonComparableField, oldVal, oldObj != nil)...) + } - // field StructSlice.MapSliceComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComparableStructWithKey, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.MapSliceComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []ComparableStructWithKey, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a ComparableStructWithKey, b ComparableStructWithKey) bool { return a.Key == b.Key }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStructWithKey) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSliceComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a ComparableStructWithKey, b ComparableStructWithKey) bool { return a.Key == b.Key }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStructWithKey) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSliceComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a ComparableStructWithKey, b ComparableStructWithKey) bool { return a.Key == b.Key })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a ComparableStructWithKey, b ComparableStructWithKey) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapSliceComparableField"), obj.MapSliceComparableField, safe.Field(oldObj, func(oldObj *StructSlice) []ComparableStructWithKey { return oldObj.MapSliceComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []ComparableStructWithKey { + return oldObj.MapSliceComparableField + }) + errs = append(errs, fn(fldPath.Child("mapSliceComparableField"), obj.MapSliceComparableField, oldVal, oldObj != nil)...) + } - // field StructSlice.MapSliceNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStructWithKey, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.MapSliceNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStructWithKey, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a NonComparableStructWithKey, b NonComparableStructWithKey) bool { return a.Key == b.Key }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStructWithKey) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSliceNonComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a NonComparableStructWithKey, b NonComparableStructWithKey) bool { return a.Key == b.Key }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStructWithKey) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSliceNonComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a NonComparableStructWithKey, b NonComparableStructWithKey) bool { return a.Key == b.Key })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a NonComparableStructWithKey, b NonComparableStructWithKey) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a NonComparableStructWithKey, b NonComparableStructWithKey) bool { return a.Key == b.Key }, validate.SemanticDeepEqual, Validate_NonComparableStructWithKey)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a NonComparableStructWithKey, b NonComparableStructWithKey) bool { return a.Key == b.Key }, validate.SemanticDeepEqual, Validate_NonComparableStructWithKey); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapSliceNonComparableField"), obj.MapSliceNonComparableField, safe.Field(oldObj, func(oldObj *StructSlice) []NonComparableStructWithKey { return oldObj.MapSliceNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []NonComparableStructWithKey { + return oldObj.MapSliceNonComparableField + }) + errs = append(errs, fn(fldPath.Child("mapSliceNonComparableField"), obj.MapSliceNonComparableField, oldVal, oldObj != nil)...) + } - // field StructSlice.MapSlicePtrKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []PtrKeyStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.MapSlicePtrKeyField + fn := func( + fldPath *field.Path, + obj, oldObj []PtrKeyStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a PtrKeyStruct, b PtrKeyStruct) bool { - return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrKeyStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSlicePtrKeyField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a PtrKeyStruct, b PtrKeyStruct) bool { + return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrKeyStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSlicePtrKeyField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a PtrKeyStruct, b PtrKeyStruct) bool { - return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a PtrKeyStruct, b PtrKeyStruct) bool { + return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a PtrKeyStruct, b PtrKeyStruct) bool { - return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) - }, validate.SemanticDeepEqual, Validate_PtrKeyStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a PtrKeyStruct, b PtrKeyStruct) bool { + return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) + }, validate.SemanticDeepEqual, Validate_PtrKeyStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapSlicePtrKeyField"), obj.MapSlicePtrKeyField, safe.Field(oldObj, func(oldObj *StructSlice) []PtrKeyStruct { return oldObj.MapSlicePtrKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []PtrKeyStruct { + return oldObj.MapSlicePtrKeyField + }) + errs = append(errs, fn(fldPath.Child("mapSlicePtrKeyField"), obj.MapSlicePtrKeyField, oldVal, oldObj != nil)...) + } - // field StructSlice.MapSliceMixedKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MixedKeyStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructSlice.MapSliceMixedKeyField + fn := func( + fldPath *field.Path, + obj, oldObj []MixedKeyStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a MixedKeyStruct, b MixedKeyStruct) bool { - return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedKeyStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSliceMixedKeyField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a MixedKeyStruct, b MixedKeyStruct) bool { + return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedKeyStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapSliceMixedKeyField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MixedKeyStruct, b MixedKeyStruct) bool { - return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MixedKeyStruct, b MixedKeyStruct) bool { + return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a MixedKeyStruct, b MixedKeyStruct) bool { - return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 - }, validate.SemanticDeepEqual, Validate_MixedKeyStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a MixedKeyStruct, b MixedKeyStruct) bool { + return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 + }, validate.SemanticDeepEqual, Validate_MixedKeyStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapSliceMixedKeyField"), obj.MapSliceMixedKeyField, safe.Field(oldObj, func(oldObj *StructSlice) []MixedKeyStruct { return oldObj.MapSliceMixedKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructSlice) []MixedKeyStruct { + return oldObj.MapSliceMixedKeyField + }) + errs = append(errs, fn(fldPath.Child("mapSliceMixedKeyField"), obj.MapSliceMixedKeyField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachkey/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachkey/zz_generated.validations.go index 0eeb6c43dc9..5405676afcc 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachkey/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachkey/zz_generated.validations.go @@ -39,98 +39,173 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[UnvalidatedStringType]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[UnvalidatedStringType]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnvalidatedStringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnvalidatedStringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[UnvalidatedStringType]string { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[UnvalidatedStringType]string { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.MapValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[ValidatedStringType]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[ValidatedStringType]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapValidatedTypedefField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapValidatedTypedefField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the key type's validation function - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_ValidatedStringType)...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_ValidatedStringType); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapValidatedTypedefField"), obj.MapValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[ValidatedStringType]string { return oldObj.MapValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[ValidatedStringType]string { + return oldObj.MapValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapValidatedTypedefField"), obj.MapValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedMapTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ValidatedMapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedMapTypeField + fn := func( + fldPath *field.Path, + obj, oldObj ValidatedMapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ValidatedMapTypeField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ValidatedMapTypeField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_ValidatedMapType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedMapTypeField"), obj.ValidatedMapTypeField, safe.Field(oldObj, func(oldObj *Struct) ValidatedMapType { return oldObj.ValidatedMapTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ValidatedMapType { + return oldObj.ValidatedMapTypeField + }) + errs = append(errs, fn(fldPath.Child("validatedMapTypeField"), obj.ValidatedMapTypeField, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatedMapType validates an instance of ValidatedMapType according // to declarative validation rules in the API schema. -func Validate_ValidatedMapType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ValidatedMapType) (errs field.ErrorList) { - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ValidatedMapType(keys)") - })...) +func Validate_ValidatedMapType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ValidatedMapType) (errs field.ErrorList) { + + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ValidatedMapType(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ValidatedStringType validates an instance of ValidatedStringType according // to declarative validation rules in the API schema. -func Validate_ValidatedStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedStringType")...) +func Validate_ValidatedStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ValidatedStringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedStringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachval/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachval/zz_generated.validations.go index 7f0f8a7f147..e9364e922ab 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachval/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/maps/eachval/zz_generated.validations.go @@ -39,76 +39,138 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type StructWithMaps - scheme.AddValidationFunc((*StructWithMaps)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructWithMaps(ctx, op, nil /* fldPath */, obj.(*StructWithMaps), safe.Cast[*StructWithMaps](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructWithMaps)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructWithMaps( + ctx, op, nil, /* fldPath */ + obj.(*StructWithMaps), + safe.Cast[*StructWithMaps](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_StructWithMaps validates an instance of StructWithMaps according // to declarative validation rules in the API schema. -func Validate_StructWithMaps(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructWithMaps) (errs field.ErrorList) { +func Validate_StructWithMaps( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructWithMaps) (errs field.ErrorList) { + // field StructWithMaps.TypeMeta has no validation - // field StructWithMaps.MapPrimitiveField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructWithMaps.MapPrimitiveField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapPrimitiveField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapPrimitiveField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapPrimitiveField"), obj.MapPrimitiveField, safe.Field(oldObj, func(oldObj *StructWithMaps) map[string]string { return oldObj.MapPrimitiveField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructWithMaps) map[string]string { + return oldObj.MapPrimitiveField + }) + errs = append(errs, fn(fldPath.Child("mapPrimitiveField"), obj.MapPrimitiveField, oldVal, oldObj != nil)...) + } - // field StructWithMaps.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructWithMaps.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapTypedefField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *StructWithMaps) map[string]StringType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructWithMaps) map[string]StringType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } - // field StructWithMaps.MapComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructWithMaps.MapComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapComparableStructField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapComparableStructField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapComparableStructField"), obj.MapComparableStructField, safe.Field(oldObj, func(oldObj *StructWithMaps) map[string]ComparableStruct { return oldObj.MapComparableStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructWithMaps) map[string]ComparableStruct { + return oldObj.MapComparableStructField + }) + errs = append(errs, fn(fldPath.Child("mapComparableStructField"), obj.MapComparableStructField, oldVal, oldObj != nil)...) + } - // field StructWithMaps.MapNonComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructWithMaps.MapNonComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapNonComparableStructField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field MapTest.MapNonComparableStructField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapNonComparableStructField"), obj.MapNonComparableStructField, safe.Field(oldObj, func(oldObj *StructWithMaps) map[string]NonComparableStruct { return oldObj.MapNonComparableStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructWithMaps) map[string]NonComparableStruct { + return oldObj.MapNonComparableStructField + }) + errs = append(errs, fn(fldPath.Child("mapNonComparableStructField"), obj.MapNonComparableStructField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/subfield/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/subfield/zz_generated.validations.go index 9efb745c1a8..57268a88f05 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/subfield/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/ratcheting/subfield/zz_generated.validations.go @@ -39,65 +39,111 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructWithSubfield - scheme.AddValidationFunc((*StructWithSubfield)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructWithSubfield(ctx, op, nil /* fldPath */, obj.(*StructWithSubfield), safe.Cast[*StructWithSubfield](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructWithSubfield)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructWithSubfield( + ctx, op, nil, /* fldPath */ + obj.(*StructWithSubfield), + safe.Cast[*StructWithSubfield](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.SubStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *SubStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SubStructField + fn := func( + fldPath *field.Path, + obj, oldObj *SubStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort intField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "intField", func(o *SubStruct) *int { return &o.IntField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntField") - })...) + func() { // cohort = "intField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "intField", + func(o *SubStruct) *int { return &o.IntField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort intPtrField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "intPtrField", func(o *SubStruct) *int { return o.IntPtrField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntPtrField") - })...) + func() { // cohort = "intPtrField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "intPtrField", + func(o *SubStruct) *int { return o.IntPtrField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntPtrField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("subStructField"), &obj.SubStructField, safe.Field(oldObj, func(oldObj *Struct) *SubStruct { return &oldObj.SubStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *SubStruct { + return &oldObj.SubStructField + }) + errs = append(errs, fn(fldPath.Child("subStructField"), &obj.SubStructField, oldVal, oldObj != nil)...) + } return errs } // Validate_StructWithSubfield validates an instance of StructWithSubfield according // to declarative validation rules in the API schema. -func Validate_StructWithSubfield(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructWithSubfield) (errs field.ErrorList) { - func() { // cohort intField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "intField", func(o *StructWithSubfield) *int { return &o.IntField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntField") - })...) +func Validate_StructWithSubfield( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructWithSubfield) (errs field.ErrorList) { + + func() { // cohort = "intField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "intField", + func(o *StructWithSubfield) *int { return &o.IntField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort intPtrField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "intPtrField", func(o *StructWithSubfield) *int { return o.IntPtrField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntPtrField") - })...) + func() { // cohort = "intPtrField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "intPtrField", + func(o *StructWithSubfield) *int { return o.IntPtrField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field IntPtrField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() // field StructWithSubfield.TypeMeta has no validation diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/maps/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/maps/zz_generated.validations.go index 76ed9e81d21..ee08ddf41d3 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/maps/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/maps/zz_generated.validations.go @@ -39,122 +39,218 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T2 - scheme.AddValidationFunc((*T2)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T2(ctx, op, nil /* fldPath */, obj.(*T2), safe.Cast[*T2](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T2)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T2( + ctx, op, nil, /* fldPath */ + obj.(*T2), + safe.Cast[*T2](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T3 - scheme.AddValidationFunc((*T3)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T3(ctx, op, nil /* fldPath */, obj.(*T3), safe.Cast[*T3](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T3)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T3( + ctx, op, nil, /* fldPath */ + obj.(*T3), + safe.Cast[*T3](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T4 - scheme.AddValidationFunc((*T4)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T4(ctx, op, nil /* fldPath */, obj.(*T4), safe.Cast[*T4](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T4)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T4( + ctx, op, nil, /* fldPath */ + obj.(*T4), + safe.Cast[*T4](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } - // field T1.T3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T3 + fn := func( + fldPath *field.Path, + obj, oldObj *T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T3(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t3"), &obj.T3, safe.Field(oldObj, func(oldObj *T1) *T3 { return &oldObj.T3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T3 { + return &oldObj.T3 + }) + errs = append(errs, fn(fldPath.Child("t3"), &obj.T3, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.MT1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]T1, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { + + { // field T2.MT1 + fn := func( + fldPath *field.Path, + obj, oldObj map[string]T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_T1)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_T1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mt1"), obj.MT1, safe.Field(oldObj, func(oldObj *T2) map[string]T1 { return oldObj.MT1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) map[string]T1 { + return oldObj.MT1 + }) + errs = append(errs, fn(fldPath.Child("mt1"), obj.MT1, oldVal, oldObj != nil)...) + } return errs } // Validate_T3 validates an instance of T3 according // to declarative validation rules in the API schema. -func Validate_T3(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T3) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T3")...) +func Validate_T3( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T3) (errs field.ErrorList) { - // field T3.T4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T4, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T3"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field T3.T4 + fn := func( + fldPath *field.Path, + obj, oldObj *T4, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T4(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t4"), &obj.T4, safe.Field(oldObj, func(oldObj *T3) *T4 { return &oldObj.T4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T3) *T4 { + return &oldObj.T4 + }) + errs = append(errs, fn(fldPath.Child("t4"), &obj.T4, oldVal, oldObj != nil)...) + } return errs } // Validate_T4 validates an instance of T4 according // to declarative validation rules in the API schema. -func Validate_T4(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T4) (errs field.ErrorList) { - // field T4.MT3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]T3, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T4( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T4) (errs field.ErrorList) { + + { // field T4.MT3 + fn := func( + fldPath *field.Path, + obj, oldObj map[string]T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_T3)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual, Validate_T3); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mt3"), obj.MT3, safe.Field(oldObj, func(oldObj *T4) map[string]T3 { return oldObj.MT3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T4) map[string]T3 { + return oldObj.MT3 + }) + errs = append(errs, fn(fldPath.Child("mt3"), obj.MT3, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/pointers/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/pointers/zz_generated.validations.go index d410ebf4333..a0d24482bb9 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/pointers/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/pointers/zz_generated.validations.go @@ -39,41 +39,69 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T2 - scheme.AddValidationFunc((*T2)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T2(ctx, op, nil /* fldPath */, obj.(*T2), safe.Cast[*T2](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T2)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T2( + ctx, op, nil, /* fldPath */ + obj.(*T2), + safe.Cast[*T2](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T3 - scheme.AddValidationFunc((*T3)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T3(ctx, op, nil /* fldPath */, obj.(*T3), safe.Cast[*T3](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T3)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T3( + ctx, op, nil, /* fldPath */ + obj.(*T3), + safe.Cast[*T3](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.PT1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T1, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.PT1 + fn := func( + fldPath *field.Path, + obj, oldObj *T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -86,26 +114,46 @@ func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Pat // call the type's validation function errs = append(errs, Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt1"), obj.PT1, safe.Field(oldObj, func(oldObj *T1) *T1 { return oldObj.PT1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T1 { + return oldObj.PT1 + }) + errs = append(errs, fn(fldPath.Child("pt1"), obj.PT1, oldVal, oldObj != nil)...) + } - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } - // field T1.PT2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PT2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -118,20 +166,33 @@ func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Pat // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt2"), obj.PT2, safe.Field(oldObj, func(oldObj *T1) *T2 { return oldObj.PT2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return oldObj.PT2 + }) + errs = append(errs, fn(fldPath.Child("pt2"), obj.PT2, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.PT1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T1, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { + + { // field T2.PT1 + fn := func( + fldPath *field.Path, + obj, oldObj *T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -144,14 +205,24 @@ func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Pat // call the type's validation function errs = append(errs, Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt1"), obj.PT1, safe.Field(oldObj, func(oldObj *T2) *T1 { return oldObj.PT1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *T1 { + return oldObj.PT1 + }) + errs = append(errs, fn(fldPath.Child("pt1"), obj.PT1, oldVal, oldObj != nil)...) + } - // field T2.PT2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.PT2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -164,14 +235,24 @@ func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Pat // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt2"), obj.PT2, safe.Field(oldObj, func(oldObj *T2) *T2 { return oldObj.PT2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *T2 { + return oldObj.PT2 + }) + errs = append(errs, fn(fldPath.Child("pt2"), obj.PT2, oldVal, oldObj != nil)...) + } - // field T2.PT3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T2.PT3 + fn := func( + fldPath *field.Path, + obj, oldObj *T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -184,15 +265,26 @@ func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Pat // call the type's validation function errs = append(errs, Validate_T3(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt3"), obj.PT3, safe.Field(oldObj, func(oldObj *T2) *T3 { return oldObj.PT3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *T3 { + return oldObj.PT3 + }) + errs = append(errs, fn(fldPath.Child("pt3"), obj.PT3, oldVal, oldObj != nil)...) + } return errs } // Validate_T3 validates an instance of T3 according // to declarative validation rules in the API schema. -func Validate_T3(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T3) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T3")...) +func Validate_T3( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T3) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T3"); len(e) != 0 { + errs = append(errs, e...) + } // field T3.I has no validation return errs diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/slices/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/slices/zz_generated.validations.go index 073d491a601..fb8b7d9ad42 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/slices/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/recursive/slices/zz_generated.validations.go @@ -39,122 +39,218 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T2 - scheme.AddValidationFunc((*T2)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T2(ctx, op, nil /* fldPath */, obj.(*T2), safe.Cast[*T2](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T2)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T2( + ctx, op, nil, /* fldPath */ + obj.(*T2), + safe.Cast[*T2](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T3 - scheme.AddValidationFunc((*T3)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T3(ctx, op, nil /* fldPath */, obj.(*T3), safe.Cast[*T3](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T3)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T3( + ctx, op, nil, /* fldPath */ + obj.(*T3), + safe.Cast[*T3](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T4 - scheme.AddValidationFunc((*T4)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T4(ctx, op, nil /* fldPath */, obj.(*T4), safe.Cast[*T4](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T4)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T4( + ctx, op, nil, /* fldPath */ + obj.(*T4), + safe.Cast[*T4](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } - // field T1.T3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T3 + fn := func( + fldPath *field.Path, + obj, oldObj *T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T3(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t3"), &obj.T3, safe.Field(oldObj, func(oldObj *T1) *T3 { return &oldObj.T3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T3 { + return &oldObj.T3 + }) + errs = append(errs, fn(fldPath.Child("t3"), &obj.T3, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - // field T2.ST1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []T1, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { + + { // field T2.ST1 + fn := func( + fldPath *field.Path, + obj, oldObj []T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_T1)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_T1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("st1"), obj.ST1, safe.Field(oldObj, func(oldObj *T2) []T1 { return oldObj.ST1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) []T1 { + return oldObj.ST1 + }) + errs = append(errs, fn(fldPath.Child("st1"), obj.ST1, oldVal, oldObj != nil)...) + } return errs } // Validate_T3 validates an instance of T3 according // to declarative validation rules in the API schema. -func Validate_T3(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T3) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T3")...) +func Validate_T3( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T3) (errs field.ErrorList) { - // field T3.T4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T4, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T3"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field T3.T4 + fn := func( + fldPath *field.Path, + obj, oldObj *T4, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_T4(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t4"), &obj.T4, safe.Field(oldObj, func(oldObj *T3) *T4 { return &oldObj.T4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T3) *T4 { + return &oldObj.T4 + }) + errs = append(errs, fn(fldPath.Child("t4"), &obj.T4, oldVal, oldObj != nil)...) + } return errs } // Validate_T4 validates an instance of T4 according // to declarative validation rules in the API schema. -func Validate_T4(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T4) (errs field.ErrorList) { - // field T4.ST3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []T3, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T4( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T4) (errs field.ErrorList) { + + { // field T4.ST3 + fn := func( + fldPath *field.Path, + obj, oldObj []T3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_T3)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_T3); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("st3"), obj.ST3, safe.Field(oldObj, func(oldObj *T4) []T3 { return oldObj.ST3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T4) []T3 { + return oldObj.ST3 + }) + errs = append(errs, fn(fldPath.Child("st3"), obj.ST3, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/multiple_validations/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/multiple_validations/zz_generated.validations.go index af84e65066f..877b097e0f2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/multiple_validations/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/multiple_validations/zz_generated.validations.go @@ -39,42 +39,76 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct #2")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct #2"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField #1")...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField #2")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*] #1") - })...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*] #2") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField #1"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField #2"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*] #1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*] #2") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } // field Struct.UnvalidatedListField has no validation return errs diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_primitive/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_primitive/zz_generated.validations.go index d00361b2c86..f51ae89d4c0 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_primitive/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_primitive/zz_generated.validations.go @@ -39,62 +39,111 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_StringType validates an instance of StringType according // to declarative validation rules in the API schema. -func Validate_StringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType")...) +func Validate_StringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_StringType)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_StringType); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) []StringType { return oldObj.ListTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []StringType { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } // field Struct.UnvalidatedListField has no validation return errs diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_struct/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_struct/zz_generated.validations.go index cea3ac249ce..49a3da701cc 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_struct/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/slice_of_struct/zz_generated.validations.go @@ -39,84 +39,152 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_OtherStruct validates an instance of OtherStruct according // to declarative validation rules in the API schema. -func Validate_OtherStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct")...) +func Validate_OtherStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_OtherTypedefStruct validates an instance of OtherTypedefStruct according // to declarative validation rules in the API schema. -func Validate_OtherTypedefStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherTypedefStruct")...) +func Validate_OtherTypedefStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherTypedefStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherTypedefStruct"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") - })...) - // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherTypedefStruct)...) - return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.ListTypedefField }), oldObj != nil)...) - - // field Struct.UnvalidatedListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherTypedefStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("UnvalidatedListField"), obj.UnvalidatedListField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.UnvalidatedListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } + + { // field Struct.UnvalidatedListField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } + } + // iterate the list and call the type's validation function + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherStruct); len(e) != 0 { + errs = append(errs, e...) + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.UnvalidatedListField + }) + errs = append(errs, fn(fldPath.Child("UnvalidatedListField"), obj.UnvalidatedListField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/typedef_to_slice/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/typedef_to_slice/zz_generated.validations.go index 910c534cf4b..5003c39f04c 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/typedef_to_slice/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/slices/typedef_to_slice/zz_generated.validations.go @@ -39,88 +39,153 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ListType validates an instance of ListType according // to declarative validation rules in the API schema. -func Validate_ListType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ListType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListType")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListType[*]") - })...) +func Validate_ListType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ListType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListType"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ListTypedefType validates an instance of ListTypedefType according // to declarative validation rules in the API schema. -func Validate_ListTypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ListTypedefType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListTypedefType")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListTypedefType[*]") - })...) +func Validate_ListTypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ListTypedefType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListTypedefType"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListTypedefType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_StringType)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_StringType); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_StringType validates an instance of StringType according // to declarative validation rules in the API schema. -func Validate_StringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType")...) +func Validate_StringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ListType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj ListType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_ListType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) ListType { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ListType { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ListTypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj ListTypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_ListTypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) ListTypedefType { return oldObj.ListTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ListTypedefType { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachkey/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachkey/zz_generated.validations.go index 10f6676bf8e..8a25f465795 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachkey/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachkey/zz_generated.validations.go @@ -39,112 +39,200 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[UnvalidatedStringType]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[UnvalidatedStringType]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnvalidatedStringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapTypedefField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnvalidatedStringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapTypedefField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[UnvalidatedStringType]string { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[UnvalidatedStringType]string { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.MapValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[ValidatedStringType]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[ValidatedStringType]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapValidatedTypedefField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapValidatedTypedefField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the key type's validation function - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_ValidatedStringType)...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_ValidatedStringType); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapValidatedTypedefField"), obj.MapValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[ValidatedStringType]string { return oldObj.MapValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[ValidatedStringType]string { + return oldObj.MapValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapValidatedTypedefField"), obj.MapValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj UnvalidatedMapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypeField + fn := func( + fldPath *field.Path, + obj, oldObj UnvalidatedMapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapTypeField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.MapTypeField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypeField"), obj.MapTypeField, safe.Field(oldObj, func(oldObj *Struct) UnvalidatedMapType { return oldObj.MapTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) UnvalidatedMapType { + return oldObj.MapTypeField + }) + errs = append(errs, fn(fldPath.Child("mapTypeField"), obj.MapTypeField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedMapTypeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ValidatedMapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedMapTypeField + fn := func( + fldPath *field.Path, + obj, oldObj ValidatedMapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.ValidatedMapTypeField(keys)") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.ValidatedMapTypeField(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_ValidatedMapType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedMapTypeField"), obj.ValidatedMapTypeField, safe.Field(oldObj, func(oldObj *Struct) ValidatedMapType { return oldObj.ValidatedMapTypeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ValidatedMapType { + return oldObj.ValidatedMapTypeField + }) + errs = append(errs, fn(fldPath.Child("validatedMapTypeField"), obj.ValidatedMapTypeField, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatedMapType validates an instance of ValidatedMapType according // to declarative validation rules in the API schema. -func Validate_ValidatedMapType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ValidatedMapType) (errs field.ErrorList) { - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedMapType(keys)") - })...) +func Validate_ValidatedMapType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ValidatedMapType) (errs field.ErrorList) { + + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedMapType(keys)") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ValidatedStringType validates an instance of ValidatedStringType according // to declarative validation rules in the API schema. -func Validate_ValidatedStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedStringType")...) +func Validate_ValidatedStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ValidatedStringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ValidatedStringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_primitive/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_primitive/zz_generated.validations.go index 7108c4bcbec..6fbbf439553 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_primitive/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_primitive/zz_generated.validations.go @@ -39,48 +39,84 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[string]StringType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]StringType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_struct/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_struct/zz_generated.validations.go index 6355fdc6f46..db212ac2c11 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_struct/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/map_of_struct/zz_generated.validations.go @@ -39,48 +39,84 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]OtherStruct { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]OtherStruct { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) map[string]OtherTypedefStruct { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]OtherTypedefStruct { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_primitive/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_primitive/zz_generated.validations.go index 172791abd58..4607bd05af5 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_primitive/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_primitive/zz_generated.validations.go @@ -39,48 +39,84 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) []StringType { return oldObj.ListTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []StringType { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_struct/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_struct/zz_generated.validations.go index da8f0b07a97..6e94718ffd9 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_struct/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/slice_of_struct/zz_generated.validations.go @@ -39,62 +39,111 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherTypedefStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.ListTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ListNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListNonComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListNonComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listNonComparableField"), obj.ListNonComparableField, safe.Field(oldObj, func(oldObj *Struct) []NonComparableStruct { return oldObj.ListNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []NonComparableStruct { + return oldObj.ListNonComparableField + }) + errs = append(errs, fn(fldPath.Child("listNonComparableField"), obj.ListNonComparableField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_map/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_map/zz_generated.validations.go index 47457f2757f..9fec4e64db2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_map/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_map/zz_generated.validations.go @@ -39,84 +39,141 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_MapType validates an instance of MapType according // to declarative validation rules in the API schema. -func Validate_MapType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MapType) (errs field.ErrorList) { - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType[*]") - })...) +func Validate_MapType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj MapType) (errs field.ErrorList) { + + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_MapTypedefType validates an instance of MapTypedefType according // to declarative validation rules in the API schema. -func Validate_MapTypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MapTypedefType) (errs field.ErrorList) { - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapTypedefType[*]") - })...) +func Validate_MapTypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj MapTypedefType) (errs field.ErrorList) { + + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapTypedefType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_StringType)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_StringType); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_StringType validates an instance of StringType according // to declarative validation rules in the API schema. -func Validate_StringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType")...) +func Validate_StringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct")...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type Struct"); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj MapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_MapType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) MapType { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MapType { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MapTypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj MapTypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_MapTypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) MapTypedefType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MapTypedefType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_slice/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_slice/zz_generated.validations.go index 8e8fd88dca8..c489bc3aef2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_slice/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/eachval/typedef_to_slice/zz_generated.validations.go @@ -39,72 +39,120 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ListType validates an instance of ListType according // to declarative validation rules in the API schema. -func Validate_ListType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ListType) (errs field.ErrorList) { - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListType[*]") - })...) +func Validate_ListType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ListType) (errs field.ErrorList) { + + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ListTypedefType validates an instance of ListTypedefType according // to declarative validation rules in the API schema. -func Validate_ListTypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ListTypedefType) (errs field.ErrorList) { - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListTypedefType[*]") - })...) +func Validate_ListTypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ListTypedefType) (errs field.ErrorList) { + + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type ListTypedefType[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ListType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj ListType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_ListType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) ListType { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ListType { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ListTypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj ListTypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListTypedefField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_ListTypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) ListTypedefType { return oldObj.ListTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ListTypedefType { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/options/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/options/zz_generated.validations.go index 7de57c27e1d..65ae23c9a6a 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/options/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/options/zz_generated.validations.go @@ -39,80 +39,154 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ConditionalStruct - scheme.AddValidationFunc((*ConditionalStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ConditionalStruct(ctx, op, nil /* fldPath */, obj.(*ConditionalStruct), safe.Cast[*ConditionalStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ConditionalStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ConditionalStruct( + ctx, op, nil, /* fldPath */ + obj.(*ConditionalStruct), + safe.Cast[*ConditionalStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } var exclusionsForConditionalEnum = []validate.EnumExclusion[ConditionalEnum]{ + { - Value: ConditionalA, Option: "FeatureA", ExcludeWhen: true}, + Value: ConditionalA, + Option: "FeatureA", + ExcludeWhen: true, + }, + { - Value: ConditionalB, Option: "FeatureB", ExcludeWhen: false}, + Value: ConditionalB, + Option: "FeatureB", + ExcludeWhen: false, + }, + { - Value: ConditionalD, Option: "FeatureA", ExcludeWhen: true}, + Value: ConditionalD, + Option: "FeatureA", + ExcludeWhen: true, + }, + { - Value: ConditionalD, Option: "FeatureB", ExcludeWhen: true}, + Value: ConditionalD, + Option: "FeatureB", + ExcludeWhen: true, + }, + { - Value: ConditionalE, Option: "FeatureC", ExcludeWhen: false}, + Value: ConditionalE, + Option: "FeatureC", + ExcludeWhen: false, + }, + { - Value: ConditionalE, Option: "FeatureD", ExcludeWhen: false}, + Value: ConditionalE, + Option: "FeatureD", + ExcludeWhen: false, + }, + { - Value: ConditionalF, Option: "FeatureC", ExcludeWhen: false}, + Value: ConditionalF, + Option: "FeatureC", + ExcludeWhen: false, + }, + { - Value: ConditionalF, Option: "FeatureD", ExcludeWhen: true}, + Value: ConditionalF, + Option: "FeatureD", + ExcludeWhen: true, + }, } var symbolsForConditionalEnum = sets.New(ConditionalA, ConditionalB, ConditionalC, ConditionalD, ConditionalE, ConditionalF) // Validate_ConditionalEnum validates an instance of ConditionalEnum according // to declarative validation rules in the API schema. -func Validate_ConditionalEnum(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ConditionalEnum) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForConditionalEnum, exclusionsForConditionalEnum)...) +func Validate_ConditionalEnum( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ConditionalEnum) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForConditionalEnum, exclusionsForConditionalEnum); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_ConditionalStruct validates an instance of ConditionalStruct according // to declarative validation rules in the API schema. -func Validate_ConditionalStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ConditionalStruct) (errs field.ErrorList) { +func Validate_ConditionalStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ConditionalStruct) (errs field.ErrorList) { + // field ConditionalStruct.TypeMeta has no validation - // field ConditionalStruct.ConditionalEnumField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ConditionalEnum, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ConditionalStruct.ConditionalEnumField + fn := func( + fldPath *field.Path, + obj, oldObj *ConditionalEnum, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ConditionalEnum(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("conditionalEnumField"), &obj.ConditionalEnumField, safe.Field(oldObj, func(oldObj *ConditionalStruct) *ConditionalEnum { return &oldObj.ConditionalEnumField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ConditionalStruct) *ConditionalEnum { + return &oldObj.ConditionalEnumField + }) + errs = append(errs, fn(fldPath.Child("conditionalEnumField"), &obj.ConditionalEnumField, oldVal, oldObj != nil)...) + } - // field ConditionalStruct.ConditionalEnumPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ConditionalEnum, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ConditionalStruct.ConditionalEnumPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *ConditionalEnum, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ConditionalEnum(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("conditionalEnumPtrField"), obj.ConditionalEnumPtrField, safe.Field(oldObj, func(oldObj *ConditionalStruct) *ConditionalEnum { return oldObj.ConditionalEnumPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ConditionalStruct) *ConditionalEnum { + return oldObj.ConditionalEnumPtrField + }) + errs = append(errs, fn(fldPath.Child("conditionalEnumPtrField"), obj.ConditionalEnumPtrField, oldVal, oldObj != nil)...) + } return errs } @@ -121,8 +195,13 @@ var symbolsForEnum0 = sets.New[Enum0]() // Validate_Enum0 validates an instance of Enum0 according // to declarative validation rules in the API schema. -func Validate_Enum0(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Enum0) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum0, nil)...) +func Validate_Enum0( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Enum0) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum0, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } @@ -131,8 +210,13 @@ var symbolsForEnum1 = sets.New(E1V1) // Validate_Enum1 validates an instance of Enum1 according // to declarative validation rules in the API schema. -func Validate_Enum1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Enum1) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum1, nil)...) +func Validate_Enum1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Enum1) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum1, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } @@ -141,8 +225,13 @@ var symbolsForEnum2 = sets.New(E2V1, E2V2) // Validate_Enum2 validates an instance of Enum2 according // to declarative validation rules in the API schema. -func Validate_Enum2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Enum2) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum2, nil)...) +func Validate_Enum2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Enum2) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum2, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } @@ -151,115 +240,203 @@ var symbolsForEnumWithExclude = sets.New(EnumWithExclude1) // Validate_EnumWithExclude validates an instance of EnumWithExclude according // to declarative validation rules in the API schema. -func Validate_EnumWithExclude(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *EnumWithExclude) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnumWithExclude, nil)...) +func Validate_EnumWithExclude( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *EnumWithExclude) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnumWithExclude, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Enum0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum0, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum0Field + fn := func( + fldPath *field.Path, + obj, oldObj *Enum0, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum0(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum0Field"), &obj.Enum0Field, safe.Field(oldObj, func(oldObj *Struct) *Enum0 { return &oldObj.Enum0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum0 { + return &oldObj.Enum0Field + }) + errs = append(errs, fn(fldPath.Child("enum0Field"), &obj.Enum0Field, oldVal, oldObj != nil)...) + } - // field Struct.Enum0PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum0, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum0PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Enum0, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum0(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum0PtrField"), obj.Enum0PtrField, safe.Field(oldObj, func(oldObj *Struct) *Enum0 { return oldObj.Enum0PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum0 { + return oldObj.Enum0PtrField + }) + errs = append(errs, fn(fldPath.Child("enum0PtrField"), obj.Enum0PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Enum1Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum1Field + fn := func( + fldPath *field.Path, + obj, oldObj *Enum1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum1Field"), &obj.Enum1Field, safe.Field(oldObj, func(oldObj *Struct) *Enum1 { return &oldObj.Enum1Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum1 { + return &oldObj.Enum1Field + }) + errs = append(errs, fn(fldPath.Child("enum1Field"), &obj.Enum1Field, oldVal, oldObj != nil)...) + } - // field Struct.Enum1PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum1PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Enum1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum1PtrField"), obj.Enum1PtrField, safe.Field(oldObj, func(oldObj *Struct) *Enum1 { return oldObj.Enum1PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum1 { + return oldObj.Enum1PtrField + }) + errs = append(errs, fn(fldPath.Child("enum1PtrField"), obj.Enum1PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Enum2Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum2Field + fn := func( + fldPath *field.Path, + obj, oldObj *Enum2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum2Field"), &obj.Enum2Field, safe.Field(oldObj, func(oldObj *Struct) *Enum2 { return &oldObj.Enum2Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum2 { + return &oldObj.Enum2Field + }) + errs = append(errs, fn(fldPath.Child("enum2Field"), &obj.Enum2Field, oldVal, oldObj != nil)...) + } - // field Struct.Enum2PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum2PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Enum2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum2PtrField"), obj.Enum2PtrField, safe.Field(oldObj, func(oldObj *Struct) *Enum2 { return oldObj.Enum2PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum2 { + return oldObj.Enum2PtrField + }) + errs = append(errs, fn(fldPath.Child("enum2PtrField"), obj.Enum2PtrField, oldVal, oldObj != nil)...) + } // field Struct.NotEnumField has no validation // field Struct.NotEnumPtrField has no validation - // field Struct.EnumWithExcludeField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *EnumWithExclude, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.EnumWithExcludeField + fn := func( + fldPath *field.Path, + obj, oldObj *EnumWithExclude, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_EnumWithExclude(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enumWithExcludeField"), &obj.EnumWithExcludeField, safe.Field(oldObj, func(oldObj *Struct) *EnumWithExclude { return &oldObj.EnumWithExcludeField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *EnumWithExclude { + return &oldObj.EnumWithExcludeField + }) + errs = append(errs, fn(fldPath.Child("enumWithExcludeField"), &obj.EnumWithExcludeField, oldVal, oldObj != nil)...) + } - // field Struct.EnumWithExcludePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *EnumWithExclude, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.EnumWithExcludePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *EnumWithExclude, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_EnumWithExclude(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enumWithExcludePtrField"), obj.EnumWithExcludePtrField, safe.Field(oldObj, func(oldObj *Struct) *EnumWithExclude { return oldObj.EnumWithExcludePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *EnumWithExclude { + return oldObj.EnumWithExcludePtrField + }) + errs = append(errs, fn(fldPath.Child("enumWithExcludePtrField"), obj.EnumWithExcludePtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/zz_generated.validations.go index 7e8a048a6fd..2cfeb7c5a0b 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/enum/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,8 +60,13 @@ var symbolsForEnum0 = sets.New[Enum0]() // Validate_Enum0 validates an instance of Enum0 according // to declarative validation rules in the API schema. -func Validate_Enum0(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Enum0) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum0, nil)...) +func Validate_Enum0( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Enum0) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum0, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } @@ -63,8 +75,13 @@ var symbolsForEnum1 = sets.New(E1V1) // Validate_Enum1 validates an instance of Enum1 according // to declarative validation rules in the API schema. -func Validate_Enum1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Enum1) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum1, nil)...) +func Validate_Enum1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Enum1) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum1, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } @@ -73,88 +90,156 @@ var symbolsForEnum2 = sets.New(E2V1, E2V2) // Validate_Enum2 validates an instance of Enum2 according // to declarative validation rules in the API schema. -func Validate_Enum2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Enum2) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum2, nil)...) +func Validate_Enum2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Enum2) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum2, nil); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Enum0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum0, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum0Field + fn := func( + fldPath *field.Path, + obj, oldObj *Enum0, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum0(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum0Field"), &obj.Enum0Field, safe.Field(oldObj, func(oldObj *Struct) *Enum0 { return &oldObj.Enum0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum0 { + return &oldObj.Enum0Field + }) + errs = append(errs, fn(fldPath.Child("enum0Field"), &obj.Enum0Field, oldVal, oldObj != nil)...) + } - // field Struct.Enum0PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum0, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum0PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Enum0, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum0(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum0PtrField"), obj.Enum0PtrField, safe.Field(oldObj, func(oldObj *Struct) *Enum0 { return oldObj.Enum0PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum0 { + return oldObj.Enum0PtrField + }) + errs = append(errs, fn(fldPath.Child("enum0PtrField"), obj.Enum0PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Enum1Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum1Field + fn := func( + fldPath *field.Path, + obj, oldObj *Enum1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum1Field"), &obj.Enum1Field, safe.Field(oldObj, func(oldObj *Struct) *Enum1 { return &oldObj.Enum1Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum1 { + return &oldObj.Enum1Field + }) + errs = append(errs, fn(fldPath.Child("enum1Field"), &obj.Enum1Field, oldVal, oldObj != nil)...) + } - // field Struct.Enum1PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum1PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Enum1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum1PtrField"), obj.Enum1PtrField, safe.Field(oldObj, func(oldObj *Struct) *Enum1 { return oldObj.Enum1PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum1 { + return oldObj.Enum1PtrField + }) + errs = append(errs, fn(fldPath.Child("enum1PtrField"), obj.Enum1PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Enum2Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum2Field + fn := func( + fldPath *field.Path, + obj, oldObj *Enum2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum2Field"), &obj.Enum2Field, safe.Field(oldObj, func(oldObj *Struct) *Enum2 { return &oldObj.Enum2Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum2 { + return &oldObj.Enum2Field + }) + errs = append(errs, fn(fldPath.Child("enum2Field"), &obj.Enum2Field, oldVal, oldObj != nil)...) + } - // field Struct.Enum2PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Enum2PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Enum2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enum2PtrField"), obj.Enum2PtrField, safe.Field(oldObj, func(oldObj *Struct) *Enum2 { return oldObj.Enum2PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum2 { + return oldObj.Enum2PtrField + }) + errs = append(errs, fn(fldPath.Child("enum2PtrField"), obj.Enum2PtrField, oldVal, oldObj != nil)...) + } // field Struct.NotEnumField has no validation // field Struct.NotEnumPtrField has no validation diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/forbidden/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/forbidden/zz_generated.validations.go index 788c54a9e25..846c7d400d6 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/forbidden/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/forbidden/zz_generated.validations.go @@ -39,27 +39,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -74,14 +88,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -96,14 +120,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringPtrField"), obj.StringPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.StringPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.StringPtrField + }) + errs = append(errs, fn(fldPath.Child("stringPtrField"), obj.StringPtrField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -118,14 +152,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return &oldObj.StringTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return &oldObj.StringTypedefField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -140,14 +184,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return oldObj.StringTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return oldObj.StringTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -162,14 +216,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -184,14 +248,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -206,14 +280,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("intTypedefField"), &obj.IntTypedefField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return &oldObj.IntTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return &oldObj.IntTypedefField + }) + errs = append(errs, fn(fldPath.Child("intTypedefField"), &obj.IntTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.IntTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -228,14 +312,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("intTypedefPtrField"), obj.IntTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return oldObj.IntTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return oldObj.IntTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("intTypedefPtrField"), obj.IntTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.BoolField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BoolField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -250,14 +344,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("boolField"), &obj.BoolField, safe.Field(oldObj, func(oldObj *Struct) *bool { return &oldObj.BoolField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return &oldObj.BoolField + }) + errs = append(errs, fn(fldPath.Child("boolField"), &obj.BoolField, oldVal, oldObj != nil)...) + } - // field Struct.FloatField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.FloatField + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -272,14 +376,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("floatField"), &obj.FloatField, safe.Field(oldObj, func(oldObj *Struct) *float64 { return &oldObj.FloatField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *float64 { + return &oldObj.FloatField + }) + errs = append(errs, fn(fldPath.Child("floatField"), &obj.FloatField, oldVal, oldObj != nil)...) + } - // field Struct.ByteField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *byte, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ByteField + fn := func( + fldPath *field.Path, + obj, oldObj *byte, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -294,14 +408,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("byteField"), &obj.ByteField, safe.Field(oldObj, func(oldObj *Struct) *byte { return &oldObj.ByteField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *byte { + return &oldObj.ByteField + }) + errs = append(errs, fn(fldPath.Child("byteField"), &obj.ByteField, oldVal, oldObj != nil)...) + } - // field Struct.OtherStructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.OtherStructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -316,14 +440,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("otherStructPtrField"), obj.OtherStructPtrField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return oldObj.OtherStructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return oldObj.OtherStructPtrField + }) + errs = append(errs, fn(fldPath.Child("otherStructPtrField"), obj.OtherStructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.SliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -338,14 +472,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("sliceField"), obj.SliceField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.SliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.SliceField + }) + errs = append(errs, fn(fldPath.Child("sliceField"), obj.SliceField, oldVal, oldObj != nil)...) + } - // field Struct.SliceTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj SliceType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj SliceType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -360,14 +504,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("sliceTypedefField"), obj.SliceTypedefField, safe.Field(oldObj, func(oldObj *Struct) SliceType { return oldObj.SliceTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) SliceType { + return oldObj.SliceTypedefField + }) + errs = append(errs, fn(fldPath.Child("sliceTypedefField"), obj.SliceTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ByteArrayField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []byte, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ByteArrayField + fn := func( + fldPath *field.Path, + obj, oldObj []byte, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -382,14 +536,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("byteArrayField"), obj.ByteArrayField, safe.Field(oldObj, func(oldObj *Struct) []byte { return oldObj.ByteArrayField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []byte { + return oldObj.ByteArrayField + }) + errs = append(errs, fn(fldPath.Child("byteArrayField"), obj.ByteArrayField, oldVal, oldObj != nil)...) + } - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -404,14 +568,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj MapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -426,7 +600,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) MapType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MapType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-extended-resource-name/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-extended-resource-name/zz_generated.validations.go index 8bfe9bba2e0..ac11c0eb383 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-extended-resource-name/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-extended-resource-name/zz_generated.validations.go @@ -38,27 +38,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type MyType - scheme.AddValidationFunc((*MyType)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MyType(ctx, op, nil /* fldPath */, obj.(*MyType), safe.Cast[*MyType](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MyType)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MyType( + ctx, op, nil, /* fldPath */ + obj.(*MyType), + safe.Cast[*MyType](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_MyType validates an instance of MyType according // to declarative validation rules in the API schema. -func Validate_MyType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MyType) (errs field.ErrorList) { +func Validate_MyType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MyType) (errs field.ErrorList) { + // field MyType.TypeMeta has no validation - // field MyType.NameField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyType.NameField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -68,16 +82,28 @@ func Validate_MyType(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("nameField"), &obj.NameField, safe.Field(oldObj, func(oldObj *MyType) *string { return &oldObj.NameField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyType) *string { + return &oldObj.NameField + }) + errs = append(errs, fn(fldPath.Child("nameField"), &obj.NameField, oldVal, oldObj != nil)...) + } - // field MyType.NamePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyType.NamePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -87,29 +113,52 @@ func Validate_MyType(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("namePtrField"), obj.NamePtrField, safe.Field(oldObj, func(oldObj *MyType) *string { return oldObj.NamePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyType) *string { + return oldObj.NamePtrField + }) + errs = append(errs, fn(fldPath.Child("namePtrField"), obj.NamePtrField, oldVal, oldObj != nil)...) + } - // field MyType.NameTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NameStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyType.NameTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *NameStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_NameStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nameTypedefField"), &obj.NameTypedefField, safe.Field(oldObj, func(oldObj *MyType) *NameStringType { return &oldObj.NameTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyType) *NameStringType { + return &oldObj.NameTypedefField + }) + errs = append(errs, fn(fldPath.Child("nameTypedefField"), &obj.NameTypedefField, oldVal, oldObj != nil)...) + } return errs } // Validate_NameStringType validates an instance of NameStringType according // to declarative validation rules in the API schema. -func Validate_NameStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NameStringType) (errs field.ErrorList) { - errs = append(errs, validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj)...) +func Validate_NameStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NameStringType) (errs field.ErrorList) { + + if e := validate.ExtendedResourceName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-key/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-key/zz_generated.validations.go index d08feada4fc..5f117fd460a 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-key/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-key/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LabelKeyStringType validates an instance of LabelKeyStringType according // to declarative validation rules in the API schema. -func Validate_LabelKeyStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *LabelKeyStringType) (errs field.ErrorList) { - errs = append(errs, validate.LabelKey(ctx, op, fldPath, obj, oldObj)...) +func Validate_LabelKeyStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *LabelKeyStringType) (errs field.ErrorList) { + + if e := validate.LabelKey(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.LabelKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LabelKeyField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LabelKey(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LabelKey(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("labelKeyField"), &obj.LabelKeyField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.LabelKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.LabelKeyField + }) + errs = append(errs, fn(fldPath.Child("labelKeyField"), &obj.LabelKeyField, oldVal, oldObj != nil)...) + } - // field Struct.LabelKeyPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LabelKeyPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LabelKey(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LabelKey(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("labelKeyPtrField"), obj.LabelKeyPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.LabelKeyPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.LabelKeyPtrField + }) + errs = append(errs, fn(fldPath.Child("labelKeyPtrField"), obj.LabelKeyPtrField, oldVal, oldObj != nil)...) + } - // field Struct.LabelKeyTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *LabelKeyStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LabelKeyTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *LabelKeyStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LabelKeyStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("labelKeyTypedefField"), &obj.LabelKeyTypedefField, safe.Field(oldObj, func(oldObj *Struct) *LabelKeyStringType { return &oldObj.LabelKeyTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *LabelKeyStringType { + return &oldObj.LabelKeyTypedefField + }) + errs = append(errs, fn(fldPath.Child("labelKeyTypedefField"), &obj.LabelKeyTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-value/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-value/zz_generated.validations.go index c18c48ab621..d877b74f226 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-value/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-label-value/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LabelValueStringType validates an instance of LabelValueStringType according // to declarative validation rules in the API schema. -func Validate_LabelValueStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *LabelValueStringType) (errs field.ErrorList) { - errs = append(errs, validate.LabelValue(ctx, op, fldPath, obj, oldObj)...) +func Validate_LabelValueStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *LabelValueStringType) (errs field.ErrorList) { + + if e := validate.LabelValue(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.LabelValueField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LabelValueField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LabelValue(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LabelValue(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("labelValueField"), &obj.LabelValueField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.LabelValueField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.LabelValueField + }) + errs = append(errs, fn(fldPath.Child("labelValueField"), &obj.LabelValueField, oldVal, oldObj != nil)...) + } - // field Struct.LabelValuePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LabelValuePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LabelValue(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LabelValue(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("labelValuePtrField"), obj.LabelValuePtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.LabelValuePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.LabelValuePtrField + }) + errs = append(errs, fn(fldPath.Child("labelValuePtrField"), obj.LabelValuePtrField, oldVal, oldObj != nil)...) + } - // field Struct.LabelValueTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *LabelValueStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LabelValueTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *LabelValueStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LabelValueStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("labelValueTypedefField"), &obj.LabelValueTypedefField, safe.Field(oldObj, func(oldObj *Struct) *LabelValueStringType { return &oldObj.LabelValueTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *LabelValueStringType { + return &oldObj.LabelValueTypedefField + }) + errs = append(errs, fn(fldPath.Child("labelValueTypedefField"), &obj.LabelValueTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name-caseless/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name-caseless/zz_generated.validations.go index 567e5fc3cdd..07cbe34e2d1 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name-caseless/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name-caseless/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LongNameStringType validates an instance of LongNameStringType according // to declarative validation rules in the API schema. -func Validate_LongNameStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *LongNameStringType) (errs field.ErrorList) { - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj)...) +func Validate_LongNameStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *LongNameStringType) (errs field.ErrorList) { + + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.LongNameField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LongNameField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("longNameField"), &obj.LongNameField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.LongNameField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.LongNameField + }) + errs = append(errs, fn(fldPath.Child("longNameField"), &obj.LongNameField, oldVal, oldObj != nil)...) + } - // field Struct.LongNamePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LongNamePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongNameCaseless(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("longNamePtrField"), obj.LongNamePtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.LongNamePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.LongNamePtrField + }) + errs = append(errs, fn(fldPath.Child("longNamePtrField"), obj.LongNamePtrField, oldVal, oldObj != nil)...) + } - // field Struct.LongNameTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *LongNameStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LongNameTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *LongNameStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LongNameStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("longNameTypedefField"), &obj.LongNameTypedefField, safe.Field(oldObj, func(oldObj *Struct) *LongNameStringType { return &oldObj.LongNameTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *LongNameStringType { + return &oldObj.LongNameTypedefField + }) + errs = append(errs, fn(fldPath.Child("longNameTypedefField"), &obj.LongNameTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name/k8s-long-name/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name/k8s-long-name/zz_generated.validations.go index 3966497a646..d7171e86a87 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name/k8s-long-name/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-long-name/k8s-long-name/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_LongNameStringType validates an instance of LongNameStringType according // to declarative validation rules in the API schema. -func Validate_LongNameStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *LongNameStringType) (errs field.ErrorList) { - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) +func Validate_LongNameStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *LongNameStringType) (errs field.ErrorList) { + + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.LongNameField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LongNameField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("longNameField"), &obj.LongNameField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.LongNameField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.LongNameField + }) + errs = append(errs, fn(fldPath.Child("longNameField"), &obj.LongNameField, oldVal, oldObj != nil)...) + } - // field Struct.LongNamePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LongNamePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.LongName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.LongName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("longNamePtrField"), obj.LongNamePtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.LongNamePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.LongNamePtrField + }) + errs = append(errs, fn(fldPath.Child("longNamePtrField"), obj.LongNamePtrField, oldVal, oldObj != nil)...) + } - // field Struct.LongNameTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *LongNameStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.LongNameTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *LongNameStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_LongNameStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("longNameTypedefField"), &obj.LongNameTypedefField, safe.Field(oldObj, func(oldObj *Struct) *LongNameStringType { return &oldObj.LongNameTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *LongNameStringType { + return &oldObj.LongNameTypedefField + }) + errs = append(errs, fn(fldPath.Child("longNameTypedefField"), &obj.LongNameTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-fully-qualified-name/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-fully-qualified-name/zz_generated.validations.go index 441ce0e5a2e..3ac7fe8dde0 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-fully-qualified-name/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-fully-qualified-name/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_FullyQualifiedNameStringType validates an instance of FullyQualifiedNameStringType according // to declarative validation rules in the API schema. -func Validate_FullyQualifiedNameStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *FullyQualifiedNameStringType) (errs field.ErrorList) { - errs = append(errs, validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj)...) +func Validate_FullyQualifiedNameStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *FullyQualifiedNameStringType) (errs field.ErrorList) { + + if e := validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.FullyQualifiedNameField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.FullyQualifiedNameField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("fullyQualifiedNameField"), &obj.FullyQualifiedNameField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.FullyQualifiedNameField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.FullyQualifiedNameField + }) + errs = append(errs, fn(fldPath.Child("fullyQualifiedNameField"), &obj.FullyQualifiedNameField, oldVal, oldObj != nil)...) + } - // field Struct.FullyQualifiedNamePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.FullyQualifiedNamePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ResourceFullyQualifiedName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("fullyQualifiedNamePtrField"), obj.FullyQualifiedNamePtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.FullyQualifiedNamePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.FullyQualifiedNamePtrField + }) + errs = append(errs, fn(fldPath.Child("fullyQualifiedNamePtrField"), obj.FullyQualifiedNamePtrField, oldVal, oldObj != nil)...) + } - // field Struct.FullyQualifiedNameTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *FullyQualifiedNameStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.FullyQualifiedNameTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *FullyQualifiedNameStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_FullyQualifiedNameStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("fullyQualifiedNameTypedefField"), &obj.FullyQualifiedNameTypedefField, safe.Field(oldObj, func(oldObj *Struct) *FullyQualifiedNameStringType { return &oldObj.FullyQualifiedNameTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *FullyQualifiedNameStringType { + return &oldObj.FullyQualifiedNameTypedefField + }) + errs = append(errs, fn(fldPath.Child("fullyQualifiedNameTypedefField"), &obj.FullyQualifiedNameTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-pool-name/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-pool-name/zz_generated.validations.go index e6cff3000ea..4e210e06ae6 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-pool-name/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-resource-pool-name/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ResourcePoolNameStringType validates an instance of ResourcePoolNameStringType according // to declarative validation rules in the API schema. -func Validate_ResourcePoolNameStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ResourcePoolNameStringType) (errs field.ErrorList) { - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj)...) +func Validate_ResourcePoolNameStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ResourcePoolNameStringType) (errs field.ErrorList) { + + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ResourcePoolNameField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ResourcePoolNameField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourcePoolNameField"), &obj.ResourcePoolNameField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.ResourcePoolNameField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.ResourcePoolNameField + }) + errs = append(errs, fn(fldPath.Child("resourcePoolNameField"), &obj.ResourcePoolNameField, oldVal, oldObj != nil)...) + } - // field Struct.ResourcePoolNamePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ResourcePoolNamePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ResourcePoolName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("resourcePoolNamePtrField"), obj.ResourcePoolNamePtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.ResourcePoolNamePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.ResourcePoolNamePtrField + }) + errs = append(errs, fn(fldPath.Child("resourcePoolNamePtrField"), obj.ResourcePoolNamePtrField, oldVal, oldObj != nil)...) + } - // field Struct.ResourcePoolNameTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ResourcePoolNameStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ResourcePoolNameTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *ResourcePoolNameStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ResourcePoolNameStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("resourcePoolNameTypedefField"), &obj.ResourcePoolNameTypedefField, safe.Field(oldObj, func(oldObj *Struct) *ResourcePoolNameStringType { return &oldObj.ResourcePoolNameTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ResourcePoolNameStringType { + return &oldObj.ResourcePoolNameTypedefField + }) + errs = append(errs, fn(fldPath.Child("resourcePoolNameTypedefField"), &obj.ResourcePoolNameTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-short-name/k8s-short-name/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-short-name/k8s-short-name/zz_generated.validations.go index 482d1647154..e6053ed46df 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-short-name/k8s-short-name/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-short-name/k8s-short-name/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ShortNameStringType validates an instance of ShortNameStringType according // to declarative validation rules in the API schema. -func Validate_ShortNameStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ShortNameStringType) (errs field.ErrorList) { - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj)...) +func Validate_ShortNameStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ShortNameStringType) (errs field.ErrorList) { + + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ShortNameField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ShortNameField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shortNameField"), &obj.ShortNameField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.ShortNameField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.ShortNameField + }) + errs = append(errs, fn(fldPath.Child("shortNameField"), &obj.ShortNameField, oldVal, oldObj != nil)...) + } - // field Struct.ShortNamePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ShortNamePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ShortName(ctx, op, fldPath, obj, oldObj)...) + if e := validate.ShortName(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("shortNamePtrField"), obj.ShortNamePtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.ShortNamePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.ShortNamePtrField + }) + errs = append(errs, fn(fldPath.Child("shortNamePtrField"), obj.ShortNamePtrField, oldVal, oldObj != nil)...) + } - // field Struct.ShortNameTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ShortNameStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ShortNameTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *ShortNameStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ShortNameStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("shortNameTypedefField"), &obj.ShortNameTypedefField, safe.Field(oldObj, func(oldObj *Struct) *ShortNameStringType { return &oldObj.ShortNameTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ShortNameStringType { + return &oldObj.ShortNameTypedefField + }) + errs = append(errs, fn(fldPath.Child("shortNameTypedefField"), &obj.ShortNameTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-uuid/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-uuid/zz_generated.validations.go index 7145bab6004..361c3eae0f2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-uuid/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/format/k8s-uuid/zz_generated.validations.go @@ -38,27 +38,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type MyType - scheme.AddValidationFunc((*MyType)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MyType(ctx, op, nil /* fldPath */, obj.(*MyType), safe.Cast[*MyType](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MyType)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MyType( + ctx, op, nil, /* fldPath */ + obj.(*MyType), + safe.Cast[*MyType](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_MyType validates an instance of MyType according // to declarative validation rules in the API schema. -func Validate_MyType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MyType) (errs field.ErrorList) { +func Validate_MyType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MyType) (errs field.ErrorList) { + // field MyType.TypeMeta has no validation - // field MyType.UUIDField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyType.UUIDField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -68,16 +82,28 @@ func Validate_MyType(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj)...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uuidField"), &obj.UUIDField, safe.Field(oldObj, func(oldObj *MyType) *string { return &oldObj.UUIDField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyType) *string { + return &oldObj.UUIDField + }) + errs = append(errs, fn(fldPath.Child("uuidField"), &obj.UUIDField, oldVal, oldObj != nil)...) + } - // field MyType.UUIDPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyType.UUIDPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -87,29 +113,52 @@ func Validate_MyType(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj)...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uuidPtrField"), obj.UUIDPtrField, safe.Field(oldObj, func(oldObj *MyType) *string { return oldObj.UUIDPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyType) *string { + return oldObj.UUIDPtrField + }) + errs = append(errs, fn(fldPath.Child("uuidPtrField"), obj.UUIDPtrField, oldVal, oldObj != nil)...) + } - // field MyType.UUIDTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UUIDStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyType.UUIDTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *UUIDStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_UUIDStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("uuidTypedefField"), &obj.UUIDTypedefField, safe.Field(oldObj, func(oldObj *MyType) *UUIDStringType { return &oldObj.UUIDTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyType) *UUIDStringType { + return &oldObj.UUIDTypedefField + }) + errs = append(errs, fn(fldPath.Child("uuidTypedefField"), &obj.UUIDTypedefField, oldVal, oldObj != nil)...) + } return errs } // Validate_UUIDStringType validates an instance of UUIDStringType according // to declarative validation rules in the API schema. -func Validate_UUIDStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UUIDStringType) (errs field.ErrorList) { - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj)...) +func Validate_UUIDStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *UUIDStringType) (errs field.ErrorList) { + + if e := validate.UUID(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/immutable/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/immutable/zz_generated.validations.go index a391627463f..5afa87d2aff 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/immutable/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/immutable/zz_generated.validations.go @@ -39,19 +39,29 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ImmutableType validates an instance of ImmutableType according // to declarative validation rules in the API schema. -func Validate_ImmutableType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ImmutableType) (errs field.ErrorList) { +func Validate_ImmutableType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ImmutableType) (errs field.ErrorList) { + earlyReturn := false if e := validate.Immutable(ctx, op, fldPath, obj, oldObj); len(e) != 0 { errs = append(errs, e...) @@ -66,15 +76,22 @@ func Validate_ImmutableType(ctx context.Context, op operation.Operation, fldPath // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -86,14 +103,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -105,14 +132,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringPtrField"), obj.StringPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.StringPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.StringPtrField + }) + errs = append(errs, fn(fldPath.Child("stringPtrField"), obj.StringPtrField, oldVal, oldObj != nil)...) + } - // field Struct.StructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructField + fn := func( + fldPath *field.Path, + obj, oldObj *ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -124,14 +161,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("structField"), &obj.StructField, safe.Field(oldObj, func(oldObj *Struct) *ComparableStruct { return &oldObj.StructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ComparableStruct { + return &oldObj.StructField + }) + errs = append(errs, fn(fldPath.Child("structField"), &obj.StructField, oldVal, oldObj != nil)...) + } - // field Struct.StructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -143,14 +190,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("structPtrField"), obj.StructPtrField, safe.Field(oldObj, func(oldObj *Struct) *ComparableStruct { return oldObj.StructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ComparableStruct { + return oldObj.StructPtrField + }) + errs = append(errs, fn(fldPath.Child("structPtrField"), obj.StructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.NonComparableStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.NonComparableStructField + fn := func( + fldPath *field.Path, + obj, oldObj *NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -162,14 +219,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("noncomparableStructField"), &obj.NonComparableStructField, safe.Field(oldObj, func(oldObj *Struct) *NonComparableStruct { return &oldObj.NonComparableStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *NonComparableStruct { + return &oldObj.NonComparableStructField + }) + errs = append(errs, fn(fldPath.Child("noncomparableStructField"), &obj.NonComparableStructField, oldVal, oldObj != nil)...) + } - // field Struct.NonComparableStructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.NonComparableStructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -181,14 +248,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("noncomparableStructPtrField"), obj.NonComparableStructPtrField, safe.Field(oldObj, func(oldObj *Struct) *NonComparableStruct { return oldObj.NonComparableStructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *NonComparableStruct { + return oldObj.NonComparableStructPtrField + }) + errs = append(errs, fn(fldPath.Child("noncomparableStructPtrField"), obj.NonComparableStructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.SliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -200,14 +277,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("sliceField"), obj.SliceField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.SliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.SliceField + }) + errs = append(errs, fn(fldPath.Child("sliceField"), obj.SliceField, oldVal, oldObj != nil)...) + } - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -219,31 +306,57 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.ImmutableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ImmutableType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ImmutableField + fn := func( + fldPath *field.Path, + obj, oldObj *ImmutableType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ImmutableType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("immutableField"), &obj.ImmutableField, safe.Field(oldObj, func(oldObj *Struct) *ImmutableType { return &oldObj.ImmutableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ImmutableType { + return &oldObj.ImmutableField + }) + errs = append(errs, fn(fldPath.Child("immutableField"), &obj.ImmutableField, oldVal, oldObj != nil)...) + } - // field Struct.ImmutablePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ImmutableType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ImmutablePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *ImmutableType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ImmutableType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("immutablePtrField"), obj.ImmutablePtrField, safe.Field(oldObj, func(oldObj *Struct) *ImmutableType { return oldObj.ImmutablePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ImmutableType { + return oldObj.ImmutablePtrField + }) + errs = append(errs, fn(fldPath.Child("immutablePtrField"), obj.ImmutablePtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/immutable_transitions/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/immutable_transitions/zz_generated.validations.go index 89a0f4328da..4f8dffec276 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/immutable_transitions/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/immutable_transitions/zz_generated.validations.go @@ -39,34 +39,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key1 == b.Key1 })...) - func() { // cohort {"key1": "a"} + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key1 == b.Key1 }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key1": "a"}" earlyReturn := false - if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key1 == "a" }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key1 == "a" }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -74,11 +92,14 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } }() - func() { // cohort {"key1": "b"} + func() { // cohort = "{"key1": "b"}" earlyReturn := false - if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key1 == "b" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *Item) *string { return &o.StringField }, validate.DirectEqualPtr, validate.Immutable) - }); len(e) != 0 { + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key1 == "b" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *Item) *string { return &o.StringField }, validate.DirectEqualPtr, validate.Immutable) + }); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -87,7 +108,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field } }() return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/multiple_keys/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/multiple_keys/zz_generated.validations.go index 39c61a07d49..5b1eb35fa42 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/multiple_keys/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/multiple_keys/zz_generated.validations.go @@ -39,107 +39,189 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Items - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Items + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { - return a.StringKey == b.StringKey && a.IntKey == b.IntKey && a.BoolKey == b.BoolKey - })...) - func() { // cohort {"stringKey": "target", "intKey": 42, "boolKey": true} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[stringKey=target,intKey=42,boolKey=true] 1") - })...) - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[stringKey=target,intKey=42,boolKey=true] 2") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { + return a.StringKey == b.StringKey && a.IntKey == b.IntKey && a.BoolKey == b.BoolKey + }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"stringKey": "target", "intKey": 42, "boolKey": true}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[stringKey=target,intKey=42,boolKey=true] 1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[stringKey=target,intKey=42,boolKey=true] 2") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("items"), obj.Items, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.Items }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.Items + }) + errs = append(errs, fn(fldPath.Child("items"), obj.Items, oldVal, oldObj != nil)...) + } - // field Struct.OutOfOrder - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.OutOfOrder + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { - return a.StringKey == b.StringKey && a.IntKey == b.IntKey && a.BoolKey == b.BoolKey - })...) - func() { // cohort {"boolKey": true, "stringKey": "target", "intKey": 42} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item OutOfOrder[boolKey=42,stringKey=target,intKey=42]") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { + return a.StringKey == b.StringKey && a.IntKey == b.IntKey && a.BoolKey == b.BoolKey + }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"boolKey": true, "stringKey": "target", "intKey": 42}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.StringKey == "target" && item.IntKey == 42 && item.BoolKey == true }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item OutOfOrder[boolKey=42,stringKey=target,intKey=42]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("outOfOrder"), obj.OutOfOrder, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.OutOfOrder }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.OutOfOrder + }) + errs = append(errs, fn(fldPath.Child("outOfOrder"), obj.OutOfOrder, oldVal, oldObj != nil)...) + } - // field Struct.PtrItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []PtrItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.PtrItems + fn := func( + fldPath *field.Path, + obj, oldObj []PtrItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a PtrItem, b PtrItem) bool { - return ((a.StringKey == nil && b.StringKey == nil) || (a.StringKey != nil && b.StringKey != nil && *a.StringKey == *b.StringKey)) && a.IntKey == b.IntKey && a.BoolKey == b.BoolKey - })...) - func() { // cohort {"stringKey": "target-ptr", "intKey": 42, "boolKey": true} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *PtrItem) bool { - return item.StringKey != nil && *item.StringKey == "target-ptr" && item.IntKey == 42 && item.BoolKey == true - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item PtrItems[stringKey=target-ptr,intKey=42,boolKey=true]") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a PtrItem, b PtrItem) bool { + return ((a.StringKey == nil && b.StringKey == nil) || (a.StringKey != nil && b.StringKey != nil && *a.StringKey == *b.StringKey)) && a.IntKey == b.IntKey && a.BoolKey == b.BoolKey + }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"stringKey": "target-ptr", "intKey": 42, "boolKey": true}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *PtrItem) bool { + return item.StringKey != nil && *item.StringKey == "target-ptr" && item.IntKey == 42 && item.BoolKey == true + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item PtrItems[stringKey=target-ptr,intKey=42,boolKey=true]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("ptrItems"), obj.PtrItems, safe.Field(oldObj, func(oldObj *Struct) []PtrItem { return oldObj.PtrItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []PtrItem { + return oldObj.PtrItems + }) + errs = append(errs, fn(fldPath.Child("ptrItems"), obj.PtrItems, oldVal, oldObj != nil)...) + } - // field Struct.MixedPtrItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MixedPtrItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MixedPtrItems + fn := func( + fldPath *field.Path, + obj, oldObj []MixedPtrItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MixedPtrItem, b MixedPtrItem) bool { - return ((a.StringPtrKey == nil && b.StringPtrKey == nil) || (a.StringPtrKey != nil && b.StringPtrKey != nil && *a.StringPtrKey == *b.StringPtrKey)) && a.StringKey == b.StringKey - })...) - func() { // cohort {"stringPtrKey": "target-ptr", "stringKey": "target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MixedPtrItem) bool { - return item.StringPtrKey != nil && *item.StringPtrKey == "target-ptr" && item.StringKey == "target" - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedPtrItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item MixedPtrItems") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MixedPtrItem, b MixedPtrItem) bool { + return ((a.StringPtrKey == nil && b.StringPtrKey == nil) || (a.StringPtrKey != nil && b.StringPtrKey != nil && *a.StringPtrKey == *b.StringPtrKey)) && a.StringKey == b.StringKey + }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"stringPtrKey": "target-ptr", "stringKey": "target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MixedPtrItem) bool { + return item.StringPtrKey != nil && *item.StringPtrKey == "target-ptr" && item.StringKey == "target" + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedPtrItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item MixedPtrItems") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("mixedPtrItems"), obj.MixedPtrItems, safe.Field(oldObj, func(oldObj *Struct) []MixedPtrItem { return oldObj.MixedPtrItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []MixedPtrItem { + return oldObj.MixedPtrItems + }) + errs = append(errs, fn(fldPath.Child("mixedPtrItems"), obj.MixedPtrItems, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/single_key/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/single_key/zz_generated.validations.go index 29410ca04b3..1d85085a891 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/single_key/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/single_key/zz_generated.validations.go @@ -39,176 +39,331 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructWithNestedTypedef - scheme.AddValidationFunc((*StructWithNestedTypedef)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructWithNestedTypedef(ctx, op, nil /* fldPath */, obj.(*StructWithNestedTypedef), safe.Cast[*StructWithNestedTypedef](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructWithNestedTypedef)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructWithNestedTypedef( + ctx, op, nil, /* fldPath */ + obj.(*StructWithNestedTypedef), + safe.Cast[*StructWithNestedTypedef](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Items - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Items + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[key=target] 1") - })...) - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[key=target] 2") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[key=target] 1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[key=target] 2") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("items"), obj.Items, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.Items }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.Items + }) + errs = append(errs, fn(fldPath.Child("items"), obj.Items, oldVal, oldObj != nil)...) + } - // field Struct.IntKeyItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []IntKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntKeyItems + fn := func( + fldPath *field.Path, + obj, oldObj []IntKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a IntKeyItem, b IntKeyItem) bool { return a.IntField == b.IntField })...) - func() { // cohort {"intField": 42} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *IntKeyItem) bool { return item.IntField == 42 }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntKeyItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item IntKeyItems[intField=42] 1") - })...) - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *IntKeyItem) bool { return item.IntField == 42 }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntKeyItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item IntKeyItems[intField=42] 2") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a IntKeyItem, b IntKeyItem) bool { return a.IntField == b.IntField }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"intField": 42}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *IntKeyItem) bool { return item.IntField == 42 }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntKeyItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item IntKeyItems[intField=42] 1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *IntKeyItem) bool { return item.IntField == 42 }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntKeyItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item IntKeyItems[intField=42] 2") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("intKeyItems"), obj.IntKeyItems, safe.Field(oldObj, func(oldObj *Struct) []IntKeyItem { return oldObj.IntKeyItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []IntKeyItem { + return oldObj.IntKeyItems + }) + errs = append(errs, fn(fldPath.Child("intKeyItems"), obj.IntKeyItems, oldVal, oldObj != nil)...) + } - // field Struct.BoolKeyItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []BoolKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BoolKeyItems + fn := func( + fldPath *field.Path, + obj, oldObj []BoolKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a BoolKeyItem, b BoolKeyItem) bool { return a.BoolField == b.BoolField })...) - func() { // cohort {"boolField": true} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *BoolKeyItem) bool { return item.BoolField == true }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *BoolKeyItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item BoolKeyItems[boolField=true] 1") - })...) - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *BoolKeyItem) bool { return item.BoolField == true }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *BoolKeyItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item BoolKeyItems[boolField=true] 2") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a BoolKeyItem, b BoolKeyItem) bool { return a.BoolField == b.BoolField }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"boolField": true}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *BoolKeyItem) bool { return item.BoolField == true }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *BoolKeyItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item BoolKeyItems[boolField=true] 1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *BoolKeyItem) bool { return item.BoolField == true }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *BoolKeyItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item BoolKeyItems[boolField=true] 2") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("boolKeyItems"), obj.BoolKeyItems, safe.Field(oldObj, func(oldObj *Struct) []BoolKeyItem { return oldObj.BoolKeyItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []BoolKeyItem { + return oldObj.BoolKeyItems + }) + errs = append(errs, fn(fldPath.Child("boolKeyItems"), obj.BoolKeyItems, oldVal, oldObj != nil)...) + } - // field Struct.TypedefItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj TypedefItemList, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefItems + fn := func( + fldPath *field.Path, + obj, oldObj TypedefItemList, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a TypedefItem, b TypedefItem) bool { return a.ID == b.ID })...) - func() { // cohort {"id": "typedef-target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *TypedefItem) bool { return item.ID == "typedef-target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *TypedefItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item TypedefItems[id=typedef-target] 1") - })...) - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *TypedefItem) bool { return item.ID == "typedef-target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *TypedefItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item TypedefItems[id=typedef-target] 2") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a TypedefItem, b TypedefItem) bool { return a.ID == b.ID }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"id": "typedef-target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *TypedefItem) bool { return item.ID == "typedef-target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *TypedefItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item TypedefItems[id=typedef-target] 1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *TypedefItem) bool { return item.ID == "typedef-target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *TypedefItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item TypedefItems[id=typedef-target] 2") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("typedefItems"), obj.TypedefItems, safe.Field(oldObj, func(oldObj *Struct) TypedefItemList { return oldObj.TypedefItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) TypedefItemList { + return oldObj.TypedefItems + }) + errs = append(errs, fn(fldPath.Child("typedefItems"), obj.TypedefItems, oldVal, oldObj != nil)...) + } - // field Struct.AtomicUniqueMapItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.AtomicUniqueMapItems + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item AtomicUniqueMapItems[key=target]") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item AtomicUniqueMapItems[key=target]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("atomicUniqueMapItems"), obj.AtomicUniqueMapItems, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.AtomicUniqueMapItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.AtomicUniqueMapItems + }) + errs = append(errs, fn(fldPath.Child("atomicUniqueMapItems"), obj.AtomicUniqueMapItems, oldVal, oldObj != nil)...) + } - // field Struct.PtrKeyItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []PtrKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.PtrKeyItems + fn := func( + fldPath *field.Path, + obj, oldObj []PtrKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a PtrKeyItem, b PtrKeyItem) bool { - return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) - })...) - func() { // cohort {"key": "target-ptr"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *PtrKeyItem) bool { return item.Key != nil && *item.Key == "target-ptr" }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrKeyItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item PtrKeyItems[key=target-ptr]") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a PtrKeyItem, b PtrKeyItem) bool { + return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) + }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "target-ptr"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *PtrKeyItem) bool { return item.Key != nil && *item.Key == "target-ptr" }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrKeyItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item PtrKeyItems[key=target-ptr]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("ptrKeyItems"), obj.PtrKeyItems, safe.Field(oldObj, func(oldObj *Struct) []PtrKeyItem { return oldObj.PtrKeyItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []PtrKeyItem { + return oldObj.PtrKeyItems + }) + errs = append(errs, fn(fldPath.Child("ptrKeyItems"), obj.PtrKeyItems, oldVal, oldObj != nil)...) + } return errs } // Validate_StructWithNestedTypedef validates an instance of StructWithNestedTypedef according // to declarative validation rules in the API schema. -func Validate_StructWithNestedTypedef(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructWithNestedTypedef) (errs field.ErrorList) { +func Validate_StructWithNestedTypedef( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructWithNestedTypedef) (errs field.ErrorList) { + // field StructWithNestedTypedef.TypeMeta has no validation - // field StructWithNestedTypedef.NestedItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NestedTypedefItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructWithNestedTypedef.NestedItems + fn := func( + fldPath *field.Path, + obj, oldObj []NestedTypedefItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a NestedTypedefItem, b NestedTypedefItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "nested-target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *NestedTypedefItem) bool { return item.Key == "nested-target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NestedTypedefItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item NestedItems[key=nested-target]") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a NestedTypedefItem, b NestedTypedefItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "nested-target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *NestedTypedefItem) bool { return item.Key == "nested-target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NestedTypedefItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item NestedItems[key=nested-target]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("nestedItems"), obj.NestedItems, safe.Field(oldObj, func(oldObj *StructWithNestedTypedef) []NestedTypedefItem { return oldObj.NestedItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructWithNestedTypedef) []NestedTypedefItem { + return oldObj.NestedItems + }) + errs = append(errs, fn(fldPath.Child("nestedItems"), obj.NestedItems, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/subfield/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/subfield/zz_generated.validations.go index 7e46bf60917..a0496f3b25e 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/subfield/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/subfield/zz_generated.validations.go @@ -39,60 +39,108 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Items - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Items + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *Item) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[key=target].stringField") - }) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key == "target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *Item) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item Items[key=target].stringField") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("items"), obj.Items, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.Items }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.Items + }) + errs = append(errs, fn(fldPath.Child("items"), obj.Items, oldVal, oldObj != nil)...) + } - // field Struct.RatchetItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []RatchetItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.RatchetItems + fn := func( + fldPath *field.Path, + obj, oldObj []RatchetItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a RatchetItem, b RatchetItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "ratchet"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *RatchetItem) bool { return item.Key == "ratchet" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *RatchetItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "status", func(o *RatchetItem) *string { return &o.Status }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "forbidden") - }) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a RatchetItem, b RatchetItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "ratchet"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *RatchetItem) bool { return item.Key == "ratchet" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *RatchetItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "status", + func(o *RatchetItem) *string { return &o.Status }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "forbidden") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("ratchetItems"), obj.RatchetItems, safe.Field(oldObj, func(oldObj *Struct) []RatchetItem { return oldObj.RatchetItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []RatchetItem { + return oldObj.RatchetItems + }) + errs = append(errs, fn(fldPath.Child("ratchetItems"), obj.RatchetItems, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/typedef/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/typedef/zz_generated.validations.go index a7cf2541b26..de34f1f1f72 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/typedef/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/typedef/zz_generated.validations.go @@ -39,25 +39,42 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ConflictingItemList validates an instance of ConflictingItemList according // to declarative validation rules in the API schema. -func Validate_ConflictingItemList(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ConflictingItemList) (errs field.ErrorList) { +func Validate_ConflictingItemList( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ConflictingItemList) (errs field.ErrorList) { + // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a DualItem, b DualItem) bool { return a.ID == b.ID })...) - func() { // cohort {"id": "target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *DualItem) bool { return item.ID == "target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ConflictingItems[id=target] from typedef") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a DualItem, b DualItem) bool { return a.ID == b.ID }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"id": "target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *DualItem) bool { return item.ID == "target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ConflictingItems[id=target] from typedef") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return errs @@ -65,13 +82,23 @@ func Validate_ConflictingItemList(ctx context.Context, op operation.Operation, f // Validate_DualItemList validates an instance of DualItemList according // to declarative validation rules in the API schema. -func Validate_DualItemList(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj DualItemList) (errs field.ErrorList) { +func Validate_DualItemList( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj DualItemList) (errs field.ErrorList) { + // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a DualItem, b DualItem) bool { return a.ID == b.ID })...) - func() { // cohort {"id": "typedef-target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *DualItem) bool { return item.ID == "typedef-target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item DualItems[id=typedef-target] from typedef") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a DualItem, b DualItem) bool { return a.ID == b.ID }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"id": "typedef-target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *DualItem) bool { return item.ID == "typedef-target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item DualItems[id=typedef-target] from typedef") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return errs @@ -79,12 +106,19 @@ func Validate_DualItemList(ctx context.Context, op operation.Operation, fldPath // Validate_ItemList validates an instance of ItemList according // to declarative validation rules in the API schema. -func Validate_ItemList(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ItemList) (errs field.ErrorList) { +func Validate_ItemList( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ItemList) (errs field.ErrorList) { + // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "immutable"} + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "immutable"}" earlyReturn := false - if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key == "immutable" }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key == "immutable" }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -92,10 +126,14 @@ func Validate_ItemList(ctx context.Context, op operation.Operation, fldPath *fie return // do not proceed } }() - func() { // cohort {"key": "validated"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key == "validated" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ItemList[key=validated]") - })...) + func() { // cohort = "{"key": "validated"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key == "validated" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ItemList[key=validated]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return errs @@ -103,13 +141,23 @@ func Validate_ItemList(ctx context.Context, op operation.Operation, fldPath *fie // Validate_ItemListAlias validates an instance of ItemListAlias according // to declarative validation rules in the API schema. -func Validate_ItemListAlias(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ItemListAlias) (errs field.ErrorList) { +func Validate_ItemListAlias( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ItemListAlias) (errs field.ErrorList) { + // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "aliased"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *Item) bool { return item.Key == "aliased" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ItemListAlias[key=aliased]") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "aliased"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *Item) bool { return item.Key == "aliased" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Item) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ItemListAlias[key=aliased]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return errs @@ -117,68 +165,119 @@ func Validate_ItemListAlias(ctx context.Context, op operation.Operation, fldPath // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.TypedefItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ItemList, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefItems + fn := func( + fldPath *field.Path, + obj, oldObj ItemList, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ItemList(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefItems"), obj.TypedefItems, safe.Field(oldObj, func(oldObj *Struct) ItemList { return oldObj.TypedefItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ItemList { + return oldObj.TypedefItems + }) + errs = append(errs, fn(fldPath.Child("typedefItems"), obj.TypedefItems, oldVal, oldObj != nil)...) + } - // field Struct.NestedTypedefItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ItemListAlias, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.NestedTypedefItems + fn := func( + fldPath *field.Path, + obj, oldObj ItemListAlias, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ItemListAlias(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("nestedTypedefItems"), obj.NestedTypedefItems, safe.Field(oldObj, func(oldObj *Struct) ItemListAlias { return oldObj.NestedTypedefItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ItemListAlias { + return oldObj.NestedTypedefItems + }) + errs = append(errs, fn(fldPath.Child("nestedTypedefItems"), obj.NestedTypedefItems, oldVal, oldObj != nil)...) + } - // field Struct.DualItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj DualItemList, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.DualItems + fn := func( + fldPath *field.Path, + obj, oldObj DualItemList, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort {"id": "field-target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *DualItem) bool { return item.ID == "field-target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item DualItems[id=field-target] from field") - })...) + func() { // cohort = "{"id": "field-target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *DualItem) bool { return item.ID == "field-target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item DualItems[id=field-target] from field") + }); len(e) != 0 { + errs = append(errs, e...) + } }() // call the type's validation function errs = append(errs, Validate_DualItemList(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("dualItems"), obj.DualItems, safe.Field(oldObj, func(oldObj *Struct) DualItemList { return oldObj.DualItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) DualItemList { + return oldObj.DualItems + }) + errs = append(errs, fn(fldPath.Child("dualItems"), obj.DualItems, oldVal, oldObj != nil)...) + } - // field Struct.ConflictingItems - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ConflictingItemList, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ConflictingItems + fn := func( + fldPath *field.Path, + obj, oldObj ConflictingItemList, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort {"id": "target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *DualItem) bool { return item.ID == "target" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ConflictingItems[id=target] from field") - })...) + func() { // cohort = "{"id": "target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *DualItem) bool { return item.ID == "target" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DualItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ConflictingItems[id=target] from field") + }); len(e) != 0 { + errs = append(errs, e...) + } }() // call the type's validation function errs = append(errs, Validate_ConflictingItemList(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("conflictingItems"), obj.ConflictingItems, safe.Field(oldObj, func(oldObj *Struct) ConflictingItemList { return oldObj.ConflictingItems }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ConflictingItemList { + return oldObj.ConflictingItems + }) + errs = append(errs, fn(fldPath.Child("conflictingItems"), obj.ConflictingItems, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/simple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/simple/zz_generated.validations.go index 7d0a5760b4e..48bfb6f4f38 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/simple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/simple/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,36 +60,56 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Tasks - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Task, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Tasks + fn := func( + fldPath *field.Path, + obj, oldObj []Task, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_union_simple_Struct_tasks_, func(list []Task) bool { - for i := range list { - if list[i].Name == "failed" { - return true + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_union_simple_Struct_tasks_, + func(list []Task) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } } - } - return false - }, func(list []Task) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true + return false + }, + func(list []Task) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } } - } - return false - })...) + return false + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tasks"), obj.Tasks, safe.Field(oldObj, func(oldObj *Struct) []Task { return oldObj.Tasks }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Task { + return oldObj.Tasks + }) + errs = append(errs, fn(fldPath.Child("tasks"), obj.Tasks, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/typedef/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/typedef/zz_generated.validations.go index 96775fa968f..0eedf81c424 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/typedef/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/union/typedef/zz_generated.validations.go @@ -39,32 +39,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Tasks - errs = append(errs, - func(fldPath *field.Path, obj, oldObj TaskList, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Tasks + fn := func( + fldPath *field.Path, + obj, oldObj TaskList, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_TaskList(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("tasks"), obj.Tasks, safe.Field(oldObj, func(oldObj *Struct) TaskList { return oldObj.Tasks }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) TaskList { + return oldObj.Tasks + }) + errs = append(errs, fn(fldPath.Child("tasks"), obj.Tasks, oldVal, oldObj != nil)...) + } return errs } @@ -73,24 +93,34 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_TaskList validates an instance of TaskList according // to declarative validation rules in the API schema. -func Validate_TaskList(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj TaskList) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_union_typedef_TaskList_, func(list TaskList) bool { - for i := range list { - if list[i].Name == "failed" { - return true +func Validate_TaskList( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj TaskList) (errs field.ErrorList) { + + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_union_typedef_TaskList_, + func(list TaskList) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } } - } - return false - }, func(list TaskList) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true + return false + }, + func(list TaskList) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } } - } - return false - })...) + return false + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/simple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/simple/zz_generated.validations.go index 27498375874..d89cb30ed00 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/simple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/simple/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,36 +60,56 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Tasks - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Task, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Tasks + fn := func( + fldPath *field.Path, + obj, oldObj []Task, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_zerorooneof_simple_Struct_tasks_, func(list []Task) bool { - for i := range list { - if list[i].Name == "failed" { - return true + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_zerorooneof_simple_Struct_tasks_, + func(list []Task) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } } - } - return false - }, func(list []Task) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true + return false + }, + func(list []Task) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } } - } - return false - })...) + return false + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tasks"), obj.Tasks, safe.Field(oldObj, func(oldObj *Struct) []Task { return oldObj.Tasks }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Task { + return oldObj.Tasks + }) + errs = append(errs, fn(fldPath.Child("tasks"), obj.Tasks, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/typedef/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/typedef/zz_generated.validations.go index 50f087af65b..5c5f449e2a5 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/typedef/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/item/zerorooneof/typedef/zz_generated.validations.go @@ -39,32 +39,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Tasks - errs = append(errs, - func(fldPath *field.Path, obj, oldObj TaskList, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Tasks + fn := func( + fldPath *field.Path, + obj, oldObj TaskList, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_TaskList(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("tasks"), obj.Tasks, safe.Field(oldObj, func(oldObj *Struct) TaskList { return oldObj.Tasks }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) TaskList { + return oldObj.Tasks + }) + errs = append(errs, fn(fldPath.Child("tasks"), obj.Tasks, oldVal, oldObj != nil)...) + } return errs } @@ -73,24 +93,34 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_TaskList validates an instance of TaskList according // to declarative validation rules in the API schema. -func Validate_TaskList(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj TaskList) (errs field.ErrorList) { - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_zerorooneof_typedef_TaskList_, func(list TaskList) bool { - for i := range list { - if list[i].Name == "failed" { - return true +func Validate_TaskList( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj TaskList) (errs field.ErrorList) { + + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_item_zerorooneof_typedef_TaskList_, + func(list TaskList) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } } - } - return false - }, func(list TaskList) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true + return false + }, + func(list TaskList) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } } - } - return false - })...) + return false + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/atomicslice/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/atomicslice/zz_generated.validations.go index b9590a417f2..c074c41cb47 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/atomicslice/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/atomicslice/zz_generated.validations.go @@ -39,90 +39,165 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type AtomicSliceStruct - scheme.AddValidationFunc((*AtomicSliceStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_AtomicSliceStruct(ctx, op, nil /* fldPath */, obj.(*AtomicSliceStruct), safe.Cast[*AtomicSliceStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*AtomicSliceStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_AtomicSliceStruct( + ctx, op, nil, /* fldPath */ + obj.(*AtomicSliceStruct), + safe.Cast[*AtomicSliceStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_AtomicSliceStruct validates an instance of AtomicSliceStruct according // to declarative validation rules in the API schema. -func Validate_AtomicSliceStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *AtomicSliceStruct) (errs field.ErrorList) { +func Validate_AtomicSliceStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *AtomicSliceStruct) (errs field.ErrorList) { + // field AtomicSliceStruct.TypeMeta has no validation - // field AtomicSliceStruct.Standard - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field AtomicSliceStruct.Standard + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standard"), obj.Standard, safe.Field(oldObj, func(oldObj *AtomicSliceStruct) []int { return oldObj.Standard }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *AtomicSliceStruct) []int { + return oldObj.Standard + }) + errs = append(errs, fn(fldPath.Child("standard"), obj.Standard, oldVal, oldObj != nil)...) + } - // field AtomicSliceStruct.Alpha - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field AtomicSliceStruct.Alpha + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - }).MarkAlpha()...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("Alpha"), obj.Alpha, safe.Field(oldObj, func(oldObj *AtomicSliceStruct) []int { return oldObj.Alpha }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *AtomicSliceStruct) []int { + return oldObj.Alpha + }) + errs = append(errs, fn(fldPath.Child("Alpha"), obj.Alpha, oldVal, oldObj != nil)...) + } - // field AtomicSliceStruct.Beta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field AtomicSliceStruct.Beta + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - }).MarkBeta()...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("Beta"), obj.Beta, safe.Field(oldObj, func(oldObj *AtomicSliceStruct) []int { return oldObj.Beta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *AtomicSliceStruct) []int { + return oldObj.Beta + }) + errs = append(errs, fn(fldPath.Child("Beta"), obj.Beta, oldVal, oldObj != nil)...) + } - // field AtomicSliceStruct.AlphaValidation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field AtomicSliceStruct.AlphaValidation + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("AlphaValidation"), obj.AlphaValidation, safe.Field(oldObj, func(oldObj *AtomicSliceStruct) []int { return oldObj.AlphaValidation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *AtomicSliceStruct) []int { + return oldObj.AlphaValidation + }) + errs = append(errs, fn(fldPath.Child("AlphaValidation"), obj.AlphaValidation, oldVal, oldObj != nil)...) + } - // field AtomicSliceStruct.BetaValidation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field AtomicSliceStruct.BetaValidation + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("BetaValidation"), obj.BetaValidation, safe.Field(oldObj, func(oldObj *AtomicSliceStruct) []int { return oldObj.BetaValidation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *AtomicSliceStruct) []int { + return oldObj.BetaValidation + }) + errs = append(errs, fn(fldPath.Child("BetaValidation"), obj.BetaValidation, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/enums/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/enums/zz_generated.validations.go index 936fe4998dd..423c2131bf0 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/enums/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/enums/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,8 +60,13 @@ var symbolsForBetaEnum = sets.New(BetaEnumA) // Validate_BetaEnum validates an instance of BetaEnum according // to declarative validation rules in the API schema. -func Validate_BetaEnum(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *BetaEnum) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForBetaEnum, nil).MarkBeta()...) +func Validate_BetaEnum( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *BetaEnum) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForBetaEnum, nil).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return errs } @@ -63,40 +75,68 @@ var symbolsForEnum = sets.New(EnumA) // Validate_Enum validates an instance of Enum according // to declarative validation rules in the API schema. -func Validate_Enum(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Enum) (errs field.ErrorList) { - errs = append(errs, validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum, nil).MarkAlpha()...) +func Validate_Enum( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Enum) (errs field.ErrorList) { + + if e := validate.Enum(ctx, op, fldPath, obj, oldObj, symbolsForEnum, nil).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.EnumField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Enum, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.EnumField + fn := func( + fldPath *field.Path, + obj, oldObj *Enum, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Enum(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enumField"), &obj.EnumField, safe.Field(oldObj, func(oldObj *Struct) *Enum { return &oldObj.EnumField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Enum { + return &oldObj.EnumField + }) + errs = append(errs, fn(fldPath.Child("enumField"), &obj.EnumField, oldVal, oldObj != nil)...) + } - // field Struct.EnumFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *BetaEnum, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.EnumFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *BetaEnum, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_BetaEnum(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("enumFieldBeta"), &obj.EnumFieldBeta, safe.Field(oldObj, func(oldObj *Struct) *BetaEnum { return &oldObj.EnumFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *BetaEnum { + return &oldObj.EnumFieldBeta + }) + errs = append(errs, fn(fldPath.Child("enumFieldBeta"), &obj.EnumFieldBeta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listkeys/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listkeys/zz_generated.validations.go index 6187d543724..de79c6a1e32 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listkeys/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listkeys/zz_generated.validations.go @@ -39,202 +39,394 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ListKeyStruct - scheme.AddValidationFunc((*ListKeyStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ListKeyStruct(ctx, op, nil /* fldPath */, obj.(*ListKeyStruct), safe.Cast[*ListKeyStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ListKeyStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ListKeyStruct( + ctx, op, nil, /* fldPath */ + obj.(*ListKeyStruct), + safe.Cast[*ListKeyStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ListKeyStruct validates an instance of ListKeyStruct according // to declarative validation rules in the API schema. -func Validate_ListKeyStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ListKeyStruct) (errs field.ErrorList) { +func Validate_ListKeyStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ListKeyStruct) (errs field.ErrorList) { + // field ListKeyStruct.TypeMeta has no validation - // field ListKeyStruct.AlphaListTypeStandardKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.AlphaListTypeStandardKey + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("alphaListTypeStandardKey"), obj.AlphaListTypeStandardKey, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MapItem { return oldObj.AlphaListTypeStandardKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MapItem { + return oldObj.AlphaListTypeStandardKey + }) + errs = append(errs, fn(fldPath.Child("alphaListTypeStandardKey"), obj.AlphaListTypeStandardKey, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.StandardListTypeAlphaKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.StandardListTypeAlphaKey + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardListTypeAlphaKey"), obj.StandardListTypeAlphaKey, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MapItem { return oldObj.StandardListTypeAlphaKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MapItem { + return oldObj.StandardListTypeAlphaKey + }) + errs = append(errs, fn(fldPath.Child("standardListTypeAlphaKey"), obj.StandardListTypeAlphaKey, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.AlphaListTypeAlphaKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.AlphaListTypeAlphaKey + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("alphaListTypeAlphaKey"), obj.AlphaListTypeAlphaKey, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MapItem { return oldObj.AlphaListTypeAlphaKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MapItem { + return oldObj.AlphaListTypeAlphaKey + }) + errs = append(errs, fn(fldPath.Child("alphaListTypeAlphaKey"), obj.AlphaListTypeAlphaKey, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.StandardListTypeMixedKeys1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.StandardListTypeMixedKeys1 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardListTypeMixedKeys1"), obj.StandardListTypeMixedKeys1, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.StandardListTypeMixedKeys1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.StandardListTypeMixedKeys1 + }) + errs = append(errs, fn(fldPath.Child("standardListTypeMixedKeys1"), obj.StandardListTypeMixedKeys1, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.StandardListTypeMixedKeys2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.StandardListTypeMixedKeys2 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardListTypeMixedKeys2"), obj.StandardListTypeMixedKeys2, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.StandardListTypeMixedKeys2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.StandardListTypeMixedKeys2 + }) + errs = append(errs, fn(fldPath.Child("standardListTypeMixedKeys2"), obj.StandardListTypeMixedKeys2, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.AlphaListTypeMixedKeys1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.AlphaListTypeMixedKeys1 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("alphaListTypeMixedKeys1"), obj.AlphaListTypeMixedKeys1, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.AlphaListTypeMixedKeys1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.AlphaListTypeMixedKeys1 + }) + errs = append(errs, fn(fldPath.Child("alphaListTypeMixedKeys1"), obj.AlphaListTypeMixedKeys1, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.AlphaListTypeMixedKeys2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.AlphaListTypeMixedKeys2 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("alphaListTypeMixedKeys2"), obj.AlphaListTypeMixedKeys2, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.AlphaListTypeMixedKeys2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.AlphaListTypeMixedKeys2 + }) + errs = append(errs, fn(fldPath.Child("alphaListTypeMixedKeys2"), obj.AlphaListTypeMixedKeys2, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.StandardListTypeMixedKeysBeta1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.StandardListTypeMixedKeysBeta1 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardListTypeMixedKeysBeta1"), obj.StandardListTypeMixedKeysBeta1, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.StandardListTypeMixedKeysBeta1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.StandardListTypeMixedKeysBeta1 + }) + errs = append(errs, fn(fldPath.Child("standardListTypeMixedKeysBeta1"), obj.StandardListTypeMixedKeysBeta1, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.StandardListTypeMixedKeysBeta2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.StandardListTypeMixedKeysBeta2 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardListTypeMixedKeysBeta2"), obj.StandardListTypeMixedKeysBeta2, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.StandardListTypeMixedKeysBeta2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.StandardListTypeMixedKeysBeta2 + }) + errs = append(errs, fn(fldPath.Child("standardListTypeMixedKeysBeta2"), obj.StandardListTypeMixedKeysBeta2, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.BetaListTypeMixedKeys1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.BetaListTypeMixedKeys1 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 }).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("betaListTypeMixedKeys1"), obj.BetaListTypeMixedKeys1, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.BetaListTypeMixedKeys1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.BetaListTypeMixedKeys1 + }) + errs = append(errs, fn(fldPath.Child("betaListTypeMixedKeys1"), obj.BetaListTypeMixedKeys1, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.BetaListTypeMixedKeys2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MultiKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.BetaListTypeMixedKeys2 + fn := func( + fldPath *field.Path, + obj, oldObj []MultiKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 }).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MultiKeyItem, b MultiKeyItem) bool { return a.Key2 == b.Key2 && a.Key1 == b.Key1 }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("betaListTypeMixedKeys2"), obj.BetaListTypeMixedKeys2, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MultiKeyItem { return oldObj.BetaListTypeMixedKeys2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MultiKeyItem { + return oldObj.BetaListTypeMixedKeys2 + }) + errs = append(errs, fn(fldPath.Child("betaListTypeMixedKeys2"), obj.BetaListTypeMixedKeys2, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.BetaListTypeStandardKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.BetaListTypeStandardKey + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("betaListTypeStandardKey"), obj.BetaListTypeStandardKey, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MapItem { return oldObj.BetaListTypeStandardKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MapItem { + return oldObj.BetaListTypeStandardKey + }) + errs = append(errs, fn(fldPath.Child("betaListTypeStandardKey"), obj.BetaListTypeStandardKey, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.StandardListTypeBetaKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.StandardListTypeBetaKey + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardListTypeBetaKey"), obj.StandardListTypeBetaKey, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MapItem { return oldObj.StandardListTypeBetaKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MapItem { + return oldObj.StandardListTypeBetaKey + }) + errs = append(errs, fn(fldPath.Child("standardListTypeBetaKey"), obj.StandardListTypeBetaKey, oldVal, oldObj != nil)...) + } - // field ListKeyStruct.BetaListTypeBetaKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListKeyStruct.BetaListTypeBetaKey + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("betaListTypeBetaKey"), obj.BetaListTypeBetaKey, safe.Field(oldObj, func(oldObj *ListKeyStruct) []MapItem { return oldObj.BetaListTypeBetaKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListKeyStruct) []MapItem { + return oldObj.BetaListTypeBetaKey + }) + errs = append(errs, fn(fldPath.Child("betaListTypeBetaKey"), obj.BetaListTypeBetaKey, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listmapitem/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listmapitem/zz_generated.validations.go index 5c7fa6a0015..8e71708337a 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listmapitem/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listmapitem/zz_generated.validations.go @@ -39,160 +39,303 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ListMapItemStruct - scheme.AddValidationFunc((*ListMapItemStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ListMapItemStruct(ctx, op, nil /* fldPath */, obj.(*ListMapItemStruct), safe.Cast[*ListMapItemStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ListMapItemStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ListMapItemStruct( + ctx, op, nil, /* fldPath */ + obj.(*ListMapItemStruct), + safe.Cast[*ListMapItemStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ListMapItemStruct validates an instance of ListMapItemStruct according // to declarative validation rules in the API schema. -func Validate_ListMapItemStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ListMapItemStruct) (errs field.ErrorList) { +func Validate_ListMapItemStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ListMapItemStruct) (errs field.ErrorList) { + // field ListMapItemStruct.TypeMeta has no validation - // field ListMapItemStruct.StandardItem - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListMapItemStruct.StandardItem + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "foo"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - }) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "foo"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("standardItem"), obj.StandardItem, safe.Field(oldObj, func(oldObj *ListMapItemStruct) []MapItem { return oldObj.StandardItem }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListMapItemStruct) []MapItem { + return oldObj.StandardItem + }) + errs = append(errs, fn(fldPath.Child("standardItem"), obj.StandardItem, oldVal, oldObj != nil)...) + } - // field ListMapItemStruct.AlphaItemTag - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListMapItemStruct.AlphaItemTag + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "foo"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - }) - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "foo"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("alphaItemTag"), obj.AlphaItemTag, safe.Field(oldObj, func(oldObj *ListMapItemStruct) []MapItem { return oldObj.AlphaItemTag }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListMapItemStruct) []MapItem { + return oldObj.AlphaItemTag + }) + errs = append(errs, fn(fldPath.Child("alphaItemTag"), obj.AlphaItemTag, oldVal, oldObj != nil)...) + } - // field ListMapItemStruct.AlphaValidation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListMapItemStruct.AlphaValidation + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "foo"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() - }) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "foo"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("alphaValidation"), obj.AlphaValidation, safe.Field(oldObj, func(oldObj *ListMapItemStruct) []MapItem { return oldObj.AlphaValidation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListMapItemStruct) []MapItem { + return oldObj.AlphaValidation + }) + errs = append(errs, fn(fldPath.Child("alphaValidation"), obj.AlphaValidation, oldVal, oldObj != nil)...) + } - // field ListMapItemStruct.DoubleAlpha - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListMapItemStruct.DoubleAlpha + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "foo"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() - }) - }).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "foo"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() + }) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("doubleAlpha"), obj.DoubleAlpha, safe.Field(oldObj, func(oldObj *ListMapItemStruct) []MapItem { return oldObj.DoubleAlpha }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListMapItemStruct) []MapItem { + return oldObj.DoubleAlpha + }) + errs = append(errs, fn(fldPath.Child("doubleAlpha"), obj.DoubleAlpha, oldVal, oldObj != nil)...) + } - // field ListMapItemStruct.BetaItemTag - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListMapItemStruct.BetaItemTag + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "foo"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - }) - }).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "foo"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }) + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("betaItemTag"), obj.BetaItemTag, safe.Field(oldObj, func(oldObj *ListMapItemStruct) []MapItem { return oldObj.BetaItemTag }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListMapItemStruct) []MapItem { + return oldObj.BetaItemTag + }) + errs = append(errs, fn(fldPath.Child("betaItemTag"), obj.BetaItemTag, oldVal, oldObj != nil)...) + } - // field ListMapItemStruct.BetaValidation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListMapItemStruct.BetaValidation + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "foo"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() - }) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "foo"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("betaValidation"), obj.BetaValidation, safe.Field(oldObj, func(oldObj *ListMapItemStruct) []MapItem { return oldObj.BetaValidation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListMapItemStruct) []MapItem { + return oldObj.BetaValidation + }) + errs = append(errs, fn(fldPath.Child("betaValidation"), obj.BetaValidation, oldVal, oldObj != nil)...) + } - // field ListMapItemStruct.DoubleBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListMapItemStruct.DoubleBeta + fn := func( + fldPath *field.Path, + obj, oldObj []MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MapItem, b MapItem) bool { return a.Key == b.Key })...) - func() { // cohort {"key": "foo"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() - }) - }).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MapItem, b MapItem) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key": "foo"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MapItem) bool { return item.Key == "foo" }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *MapItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() + }) + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("doubleBeta"), obj.DoubleBeta, safe.Field(oldObj, func(oldObj *ListMapItemStruct) []MapItem { return oldObj.DoubleBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListMapItemStruct) []MapItem { + return oldObj.DoubleBeta + }) + errs = append(errs, fn(fldPath.Child("doubleBeta"), obj.DoubleBeta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listset/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listset/zz_generated.validations.go index 3840e6a0c7a..6087f85354a 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listset/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/listset/zz_generated.validations.go @@ -39,30 +39,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ListSetStruct - scheme.AddValidationFunc((*ListSetStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ListSetStruct(ctx, op, nil /* fldPath */, obj.(*ListSetStruct), safe.Cast[*ListSetStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ListSetStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ListSetStruct( + ctx, op, nil, /* fldPath */ + obj.(*ListSetStruct), + safe.Cast[*ListSetStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ComplexSetItem validates an instance of ComplexSetItem according // to declarative validation rules in the API schema. -func Validate_ComplexSetItem(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComplexSetItem) (errs field.ErrorList) { - // field ComplexSetItem.Value - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ComplexSetItem( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ComplexSetItem) (errs field.ErrorList) { + + { // field ComplexSetItem.Value + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("value"), &obj.Value, safe.Field(oldObj, func(oldObj *ComplexSetItem) *int { return &oldObj.Value }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ComplexSetItem) *int { + return &oldObj.Value + }) + errs = append(errs, fn(fldPath.Child("value"), &obj.Value, oldVal, oldObj != nil)...) + } // field ComplexSetItem.StringVal has no validation return errs @@ -70,18 +92,33 @@ func Validate_ComplexSetItem(ctx context.Context, op operation.Operation, fldPat // Validate_ComplexSetItemBeta validates an instance of ComplexSetItemBeta according // to declarative validation rules in the API schema. -func Validate_ComplexSetItemBeta(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ComplexSetItemBeta) (errs field.ErrorList) { - // field ComplexSetItemBeta.Value - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_ComplexSetItemBeta( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ComplexSetItemBeta) (errs field.ErrorList) { + + { // field ComplexSetItemBeta.Value + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("value"), &obj.Value, safe.Field(oldObj, func(oldObj *ComplexSetItemBeta) *int { return &oldObj.Value }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ComplexSetItemBeta) *int { + return &oldObj.Value + }) + errs = append(errs, fn(fldPath.Child("value"), &obj.Value, oldVal, oldObj != nil)...) + } // field ComplexSetItemBeta.StringVal has no validation return errs @@ -89,104 +126,197 @@ func Validate_ComplexSetItemBeta(ctx context.Context, op operation.Operation, fl // Validate_ListSetStruct validates an instance of ListSetStruct according // to declarative validation rules in the API schema. -func Validate_ListSetStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ListSetStruct) (errs field.ErrorList) { +func Validate_ListSetStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ListSetStruct) (errs field.ErrorList) { + // field ListSetStruct.TypeMeta has no validation - // field ListSetStruct.Set - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComplexSetItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListSetStruct.Set + fn := func( + fldPath *field.Path, + obj, oldObj []ComplexSetItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItem)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItem); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("set"), obj.Set, safe.Field(oldObj, func(oldObj *ListSetStruct) []ComplexSetItem { return oldObj.Set }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListSetStruct) []ComplexSetItem { + return oldObj.Set + }) + errs = append(errs, fn(fldPath.Child("set"), obj.Set, oldVal, oldObj != nil)...) + } - // field ListSetStruct.BetaSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComplexSetItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListSetStruct.BetaSet + fn := func( + fldPath *field.Path, + obj, oldObj []ComplexSetItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItem)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItem); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("betaSet"), obj.BetaSet, safe.Field(oldObj, func(oldObj *ListSetStruct) []ComplexSetItem { return oldObj.BetaSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListSetStruct) []ComplexSetItem { + return oldObj.BetaSet + }) + errs = append(errs, fn(fldPath.Child("betaSet"), obj.BetaSet, oldVal, oldObj != nil)...) + } - // field ListSetStruct.ChainedSubfieldSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []SimpleSetItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListSetStruct.ChainedSubfieldSet + fn := func( + fldPath *field.Path, + obj, oldObj []SimpleSetItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SimpleSetItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *SimpleSetItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() - }) - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SimpleSetItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *SimpleSetItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha() + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("chainedSubfieldSet"), obj.ChainedSubfieldSet, safe.Field(oldObj, func(oldObj *ListSetStruct) []SimpleSetItem { return oldObj.ChainedSubfieldSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListSetStruct) []SimpleSetItem { + return oldObj.ChainedSubfieldSet + }) + errs = append(errs, fn(fldPath.Child("chainedSubfieldSet"), obj.ChainedSubfieldSet, oldVal, oldObj != nil)...) + } - // field ListSetStruct.SetBetaItem - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComplexSetItemBeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListSetStruct.SetBetaItem + fn := func( + fldPath *field.Path, + obj, oldObj []ComplexSetItemBeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItemBeta)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItemBeta); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("setBetaItem"), obj.SetBetaItem, safe.Field(oldObj, func(oldObj *ListSetStruct) []ComplexSetItemBeta { return oldObj.SetBetaItem }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListSetStruct) []ComplexSetItemBeta { + return oldObj.SetBetaItem + }) + errs = append(errs, fn(fldPath.Child("setBetaItem"), obj.SetBetaItem, oldVal, oldObj != nil)...) + } - // field ListSetStruct.BetaSetBetaItem - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComplexSetItemBeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListSetStruct.BetaSetBetaItem + fn := func( + fldPath *field.Path, + obj, oldObj []ComplexSetItemBeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItemBeta)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, Validate_ComplexSetItemBeta); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("betaSetBetaItem"), obj.BetaSetBetaItem, safe.Field(oldObj, func(oldObj *ListSetStruct) []ComplexSetItemBeta { return oldObj.BetaSetBetaItem }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListSetStruct) []ComplexSetItemBeta { + return oldObj.BetaSetBetaItem + }) + errs = append(errs, fn(fldPath.Child("betaSetBetaItem"), obj.BetaSetBetaItem, oldVal, oldObj != nil)...) + } - // field ListSetStruct.ChainedSubfieldSetBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []SimpleSetItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ListSetStruct.ChainedSubfieldSetBeta + fn := func( + fldPath *field.Path, + obj, oldObj []SimpleSetItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SimpleSetItem) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", func(o *SimpleSetItem) *int { return &o.Value }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() - }) - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SimpleSetItem) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "value", + func(o *SimpleSetItem) *int { return &o.Value }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta() + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("chainedSubfieldSetBeta"), obj.ChainedSubfieldSetBeta, safe.Field(oldObj, func(oldObj *ListSetStruct) []SimpleSetItem { return oldObj.ChainedSubfieldSetBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ListSetStruct) []SimpleSetItem { + return oldObj.ChainedSubfieldSetBeta + }) + errs = append(errs, fn(fldPath.Child("chainedSubfieldSetBeta"), obj.ChainedSubfieldSetBeta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/mapvalidation/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/mapvalidation/zz_generated.validations.go index 8b774c2311a..1de20c27d7d 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/mapvalidation/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/mapvalidation/zz_generated.validations.go @@ -39,132 +39,246 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type MapValidationStruct - scheme.AddValidationFunc((*MapValidationStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MapValidationStruct(ctx, op, nil /* fldPath */, obj.(*MapValidationStruct), safe.Cast[*MapValidationStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MapValidationStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MapValidationStruct( + ctx, op, nil, /* fldPath */ + obj.(*MapValidationStruct), + safe.Cast[*MapValidationStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_MapValidationStruct validates an instance of MapValidationStruct according // to declarative validation rules in the API schema. -func Validate_MapValidationStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapValidationStruct) (errs field.ErrorList) { +func Validate_MapValidationStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MapValidationStruct) (errs field.ErrorList) { + // field MapValidationStruct.TypeMeta has no validation - // field MapValidationStruct.StandardEachVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.StandardEachVal + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardEachVal"), obj.StandardEachVal, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.StandardEachVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.StandardEachVal + }) + errs = append(errs, fn(fldPath.Child("standardEachVal"), obj.StandardEachVal, oldVal, oldObj != nil)...) + } - // field MapValidationStruct.AlphaEachVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.AlphaEachVal + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) - }).MarkAlpha()...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("AlphaEachVal"), obj.AlphaEachVal, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.AlphaEachVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.AlphaEachVal + }) + errs = append(errs, fn(fldPath.Child("AlphaEachVal"), obj.AlphaEachVal, oldVal, oldObj != nil)...) + } - // field MapValidationStruct.BetaEachVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.BetaEachVal + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) - }).MarkBeta()...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("BetaEachVal"), obj.BetaEachVal, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.BetaEachVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.BetaEachVal + }) + errs = append(errs, fn(fldPath.Child("BetaEachVal"), obj.BetaEachVal, oldVal, oldObj != nil)...) + } - // field MapValidationStruct.StandardEachKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.StandardEachKey + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("standardEachKey"), obj.StandardEachKey, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.StandardEachKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.StandardEachKey + }) + errs = append(errs, fn(fldPath.Child("standardEachKey"), obj.StandardEachKey, oldVal, oldObj != nil)...) + } - // field MapValidationStruct.AlphaEachKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.AlphaEachKey + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) - }).MarkAlpha()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("AlphaEachKey"), obj.AlphaEachKey, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.AlphaEachKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.AlphaEachKey + }) + errs = append(errs, fn(fldPath.Child("AlphaEachKey"), obj.AlphaEachKey, oldVal, oldObj != nil)...) + } - // field MapValidationStruct.BetaEachKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.BetaEachKey + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) - }).MarkBeta()...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2) + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("BetaEachKey"), obj.BetaEachKey, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.BetaEachKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.BetaEachKey + }) + errs = append(errs, fn(fldPath.Child("BetaEachKey"), obj.BetaEachKey, oldVal, oldObj != nil)...) + } - // field MapValidationStruct.AlphaValidation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.AlphaValidation + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha() - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha() + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("AlphaValidation"), obj.AlphaValidation, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.AlphaValidation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.AlphaValidation + }) + errs = append(errs, fn(fldPath.Child("AlphaValidation"), obj.AlphaValidation, oldVal, oldObj != nil)...) + } - // field MapValidationStruct.BetaValidation - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MapValidationStruct.BetaValidation + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2).MarkBeta() - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.MaxLength(ctx, op, fldPath, obj, oldObj, 2).MarkBeta() + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("BetaValidation"), obj.BetaValidation, safe.Field(oldObj, func(oldObj *MapValidationStruct) map[string]string { return oldObj.BetaValidation }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MapValidationStruct) map[string]string { + return oldObj.BetaValidation + }) + errs = append(errs, fn(fldPath.Child("BetaValidation"), obj.BetaValidation, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/modes/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/modes/zz_generated.validations.go index 1799b20c036..1799c42427e 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/modes/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/modes/zz_generated.validations.go @@ -38,97 +38,160 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type AlphaStruct - scheme.AddValidationFunc((*AlphaStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_AlphaStruct(ctx, op, nil /* fldPath */, obj.(*AlphaStruct), safe.Cast[*AlphaStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*AlphaStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_AlphaStruct( + ctx, op, nil, /* fldPath */ + obj.(*AlphaStruct), + safe.Cast[*AlphaStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type BetaStruct - scheme.AddValidationFunc((*BetaStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_BetaStruct(ctx, op, nil /* fldPath */, obj.(*BetaStruct), safe.Cast[*BetaStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*BetaStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_BetaStruct( + ctx, op, nil, /* fldPath */ + obj.(*BetaStruct), + safe.Cast[*BetaStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type CrossLevels - scheme.AddValidationFunc((*CrossLevels)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_CrossLevels(ctx, op, nil /* fldPath */, obj.(*CrossLevels), safe.Cast[*CrossLevels](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*CrossLevels)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_CrossLevels( + ctx, op, nil, /* fldPath */ + obj.(*CrossLevels), + safe.Cast[*CrossLevels](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type MixedLevels - scheme.AddValidationFunc((*MixedLevels)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MixedLevels(ctx, op, nil /* fldPath */, obj.(*MixedLevels), safe.Cast[*MixedLevels](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MixedLevels)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MixedLevels( + ctx, op, nil, /* fldPath */ + obj.(*MixedLevels), + safe.Cast[*MixedLevels](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type SameFieldMixed - scheme.AddValidationFunc((*SameFieldMixed)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_SameFieldMixed(ctx, op, nil /* fldPath */, obj.(*SameFieldMixed), safe.Cast[*SameFieldMixed](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*SameFieldMixed)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_SameFieldMixed( + ctx, op, nil, /* fldPath */ + obj.(*SameFieldMixed), + safe.Cast[*SameFieldMixed](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type SameValueMixedPayloads - scheme.AddValidationFunc((*SameValueMixedPayloads)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_SameValueMixedPayloads(ctx, op, nil /* fldPath */, obj.(*SameValueMixedPayloads), safe.Cast[*SameValueMixedPayloads](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*SameValueMixedPayloads)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_SameValueMixedPayloads( + ctx, op, nil, /* fldPath */ + obj.(*SameValueMixedPayloads), + safe.Cast[*SameValueMixedPayloads](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_AlphaStruct validates an instance of AlphaStruct according // to declarative validation rules in the API schema. -func Validate_AlphaStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *AlphaStruct) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *AlphaStruct) *string { return obj.FieldA }, func(obj *AlphaStruct) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_AlphaStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *AlphaStruct) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *AlphaStruct) *string { return obj.FieldA }, + func(obj *AlphaStruct) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", func(obj *AlphaStruct) *string { return obj.FieldB }, func(obj *AlphaStruct) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", + func(obj *AlphaStruct) *string { return obj.FieldB }, + func(obj *AlphaStruct) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field AlphaStruct.TypeMeta has no validation // field AlphaStruct.D1 has no validation @@ -139,45 +202,66 @@ func Validate_AlphaStruct(ctx context.Context, op operation.Operation, fldPath * // Validate_BetaStruct validates an instance of BetaStruct according // to declarative validation rules in the API schema. -func Validate_BetaStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *BetaStruct) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *BetaStruct) *string { return obj.FieldA }, func(obj *BetaStruct) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkBeta()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_BetaStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *BetaStruct) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *BetaStruct) *string { return obj.FieldA }, + func(obj *BetaStruct) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkBeta()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", func(obj *BetaStruct) *string { return obj.FieldB }, func(obj *BetaStruct) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkBeta()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", + func(obj *BetaStruct) *string { return obj.FieldB }, + func(obj *BetaStruct) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkBeta()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field BetaStruct.TypeMeta has no validation // field BetaStruct.D1 has no validation @@ -188,45 +272,66 @@ func Validate_BetaStruct(ctx context.Context, op operation.Operation, fldPath *f // Validate_CrossLevels validates an instance of CrossLevels according // to declarative validation rules in the API schema. -func Validate_CrossLevels(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *CrossLevels) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "a", func(obj *CrossLevels) *string { return obj.A }, func(obj *CrossLevels) string { return obj.Kind }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_CrossLevels( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *CrossLevels) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "a", + func(obj *CrossLevels) *string { return obj.A }, + func(obj *CrossLevels) string { return obj.Kind }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "b", func(obj *CrossLevels) *string { return obj.B }, func(obj *CrossLevels) string { return obj.Kind }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "b", + func(obj *CrossLevels) *string { return obj.B }, + func(obj *CrossLevels) string { return obj.Kind }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field CrossLevels.TypeMeta has no validation // field CrossLevels.Kind has no validation @@ -237,45 +342,66 @@ func Validate_CrossLevels(ctx context.Context, op operation.Operation, fldPath * // Validate_MixedLevels validates an instance of MixedLevels according // to declarative validation rules in the API schema. -func Validate_MixedLevels(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedLevels) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "a", func(obj *MixedLevels) *string { return obj.A }, func(obj *MixedLevels) string { return obj.Mode }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_MixedLevels( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MixedLevels) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "a", + func(obj *MixedLevels) *string { return obj.A }, + func(obj *MixedLevels) string { return obj.Mode }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "b", func(obj *MixedLevels) *string { return obj.B }, func(obj *MixedLevels) string { return obj.Mode }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkBeta()...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "b", + func(obj *MixedLevels) *string { return obj.B }, + func(obj *MixedLevels) string { return obj.Mode }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj).MarkBeta()...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field MixedLevels.TypeMeta has no validation // field MixedLevels.Mode has no validation @@ -286,39 +412,54 @@ func Validate_MixedLevels(ctx context.Context, op operation.Operation, fldPath * // Validate_SameFieldMixed validates an instance of SameFieldMixed according // to declarative validation rules in the API schema. -func Validate_SameFieldMixed(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SameFieldMixed) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "value", func(obj *SameFieldMixed) *string { return obj.Value }, func(obj *SameFieldMixed) string { return obj.Mode }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_SameFieldMixed( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *SameFieldMixed) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "value", + func(obj *SameFieldMixed) *string { return obj.Value }, + func(obj *SameFieldMixed) string { return obj.Mode }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { + }, + }, + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field SameFieldMixed.TypeMeta has no validation // field SameFieldMixed.Mode has no validation @@ -328,27 +469,39 @@ func Validate_SameFieldMixed(ctx context.Context, op operation.Operation, fldPat // Validate_SameValueMixedPayloads validates an instance of SameValueMixedPayloads according // to declarative validation rules in the API schema. -func Validate_SameValueMixedPayloads(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SameValueMixedPayloads) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "value", func(obj *SameValueMixedPayloads) *string { return obj.Value }, func(obj *SameValueMixedPayloads) string { return obj.Mode }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_SameValueMixedPayloads( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *SameValueMixedPayloads) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "value", + func(obj *SameValueMixedPayloads) *string { return obj.Value }, + func(obj *SameValueMixedPayloads) string { return obj.Mode }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 3).MarkBeta()...) return errs - } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 3).MarkBeta()...) - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field SameValueMixedPayloads.TypeMeta has no validation // field SameValueMixedPayloads.Mode has no validation diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/optionalrequired/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/optionalrequired/zz_generated.validations.go index 784e68b563b..40de57607c3 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/optionalrequired/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/optionalrequired/zz_generated.validations.go @@ -38,27 +38,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.RequiredField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.RequiredField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -70,14 +84,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("requiredField"), obj.RequiredField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.RequiredField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.RequiredField + }) + errs = append(errs, fn(fldPath.Child("requiredField"), obj.RequiredField, oldVal, oldObj != nil)...) + } - // field Struct.RequiredFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.RequiredFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -89,7 +113,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("requiredFieldBeta"), obj.RequiredFieldBeta, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.RequiredFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.RequiredFieldBeta + }) + errs = append(errs, fn(fldPath.Child("requiredFieldBeta"), obj.RequiredFieldBeta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/simple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/simple/zz_generated.validations.go index f3a6a062f3c..066aaeadfdf 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/simple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/simple/zz_generated.validations.go @@ -39,67 +39,119 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type SpecialValidationStruct - scheme.AddValidationFunc((*SpecialValidationStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_SpecialValidationStruct(ctx, op, nil /* fldPath */, obj.(*SpecialValidationStruct), safe.Cast[*SpecialValidationStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*SpecialValidationStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_SpecialValidationStruct( + ctx, op, nil, /* fldPath */ + obj.(*SpecialValidationStruct), + safe.Cast[*SpecialValidationStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StructWithValidateFalse - scheme.AddValidationFunc((*StructWithValidateFalse)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StructWithValidateFalse(ctx, op, nil /* fldPath */, obj.(*StructWithValidateFalse), safe.Cast[*StructWithValidateFalse](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StructWithValidateFalse)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StructWithValidateFalse( + ctx, op, nil, /* fldPath */ + obj.(*StructWithValidateFalse), + safe.Cast[*StructWithValidateFalse](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_SpecialValidationStruct validates an instance of SpecialValidationStruct according // to declarative validation rules in the API schema. -func Validate_SpecialValidationStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SpecialValidationStruct) (errs field.ErrorList) { +func Validate_SpecialValidationStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *SpecialValidationStruct) (errs field.ErrorList) { + // field SpecialValidationStruct.TypeMeta has no validation - // field SpecialValidationStruct.NEQField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field SpecialValidationStruct.NEQField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, 5).MarkAlpha()...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, 5).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("neqField"), &obj.NEQField, safe.Field(oldObj, func(oldObj *SpecialValidationStruct) *int { return &oldObj.NEQField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *SpecialValidationStruct) *int { + return &oldObj.NEQField + }) + errs = append(errs, fn(fldPath.Child("neqField"), &obj.NEQField, oldVal, oldObj != nil)...) + } - // field SpecialValidationStruct.NEQFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field SpecialValidationStruct.NEQFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, 5).MarkBeta()...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, 5).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("neqFieldBeta"), &obj.NEQFieldBeta, safe.Field(oldObj, func(oldObj *SpecialValidationStruct) *int { return &oldObj.NEQFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *SpecialValidationStruct) *int { + return &oldObj.NEQFieldBeta + }) + errs = append(errs, fn(fldPath.Child("neqFieldBeta"), &obj.NEQFieldBeta, oldVal, oldObj != nil)...) + } - // field SpecialValidationStruct.ForbiddenField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field SpecialValidationStruct.ForbiddenField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -114,14 +166,24 @@ func Validate_SpecialValidationStruct(ctx context.Context, op operation.Operatio return // do not proceed } return - }(fldPath.Child("forbiddenField"), obj.ForbiddenField, safe.Field(oldObj, func(oldObj *SpecialValidationStruct) *string { return oldObj.ForbiddenField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *SpecialValidationStruct) *string { + return oldObj.ForbiddenField + }) + errs = append(errs, fn(fldPath.Child("forbiddenField"), obj.ForbiddenField, oldVal, oldObj != nil)...) + } - // field SpecialValidationStruct.ForbiddenFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field SpecialValidationStruct.ForbiddenFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -136,14 +198,24 @@ func Validate_SpecialValidationStruct(ctx context.Context, op operation.Operatio return // do not proceed } return - }(fldPath.Child("forbiddenFieldBeta"), obj.ForbiddenFieldBeta, safe.Field(oldObj, func(oldObj *SpecialValidationStruct) *string { return oldObj.ForbiddenFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *SpecialValidationStruct) *string { + return oldObj.ForbiddenFieldBeta + }) + errs = append(errs, fn(fldPath.Child("forbiddenFieldBeta"), obj.ForbiddenFieldBeta, oldVal, oldObj != nil)...) + } - // field SpecialValidationStruct.UpdateField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field SpecialValidationStruct.UpdateField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -155,14 +227,24 @@ func Validate_SpecialValidationStruct(ctx context.Context, op operation.Operatio return // do not proceed } return - }(fldPath.Child("updateField"), &obj.UpdateField, safe.Field(oldObj, func(oldObj *SpecialValidationStruct) *string { return &oldObj.UpdateField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *SpecialValidationStruct) *string { + return &oldObj.UpdateField + }) + errs = append(errs, fn(fldPath.Child("updateField"), &obj.UpdateField, oldVal, oldObj != nil)...) + } - // field SpecialValidationStruct.UpdateFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field SpecialValidationStruct.UpdateFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -174,70 +256,131 @@ func Validate_SpecialValidationStruct(ctx context.Context, op operation.Operatio return // do not proceed } return - }(fldPath.Child("updateFieldBeta"), &obj.UpdateFieldBeta, safe.Field(oldObj, func(oldObj *SpecialValidationStruct) *string { return &oldObj.UpdateFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *SpecialValidationStruct) *string { + return &oldObj.UpdateFieldBeta + }) + errs = append(errs, fn(fldPath.Child("updateFieldBeta"), &obj.UpdateFieldBeta, oldVal, oldObj != nil)...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intFieldBeta"), &obj.IntFieldBeta, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntFieldBeta + }) + errs = append(errs, fn(fldPath.Child("intFieldBeta"), &obj.IntFieldBeta, oldVal, oldObj != nil)...) + } - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 5).MarkAlpha()...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 5).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 5).MarkBeta()...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 5).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringFieldBeta"), &obj.StringFieldBeta, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringFieldBeta + }) + errs = append(errs, fn(fldPath.Child("stringFieldBeta"), &obj.StringFieldBeta, oldVal, oldObj != nil)...) + } - // field Struct.SliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -249,14 +392,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("sliceField"), obj.SliceField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.SliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.SliceField + }) + errs = append(errs, fn(fldPath.Child("sliceField"), obj.SliceField, oldVal, oldObj != nil)...) + } - // field Struct.SliceFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -268,38 +421,72 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("sliceFieldBeta"), obj.SliceFieldBeta, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.SliceFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.SliceFieldBeta + }) + errs = append(errs, fn(fldPath.Child("sliceFieldBeta"), obj.SliceFieldBeta, oldVal, oldObj != nil)...) + } - // field Struct.UUIDField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UUIDField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uuidField"), &obj.UUIDField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.UUIDField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.UUIDField + }) + errs = append(errs, fn(fldPath.Child("uuidField"), &obj.UUIDField, oldVal, oldObj != nil)...) + } - // field Struct.UUIDFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UUIDFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.UUID(ctx, op, fldPath, obj, oldObj).MarkBeta()...) + if e := validate.UUID(ctx, op, fldPath, obj, oldObj).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uuidFieldBeta"), &obj.UUIDFieldBeta, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.UUIDFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.UUIDFieldBeta + }) + errs = append(errs, fn(fldPath.Child("uuidFieldBeta"), &obj.UUIDFieldBeta, oldVal, oldObj != nil)...) + } - // field Struct.ImmutableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ImmutableField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -311,14 +498,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("immutableField"), &obj.ImmutableField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.ImmutableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.ImmutableField + }) + errs = append(errs, fn(fldPath.Child("immutableField"), &obj.ImmutableField, oldVal, oldObj != nil)...) + } - // field Struct.ImmutableFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ImmutableFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -330,39 +527,72 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("immutableFieldBeta"), &obj.ImmutableFieldBeta, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.ImmutableFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.ImmutableFieldBeta + }) + errs = append(errs, fn(fldPath.Child("immutableFieldBeta"), &obj.ImmutableFieldBeta, oldVal, oldObj != nil)...) + } return errs } // Validate_StructWithValidateFalse validates an instance of StructWithValidateFalse according // to declarative validation rules in the API schema. -func Validate_StructWithValidateFalse(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StructWithValidateFalse) (errs field.ErrorList) { +func Validate_StructWithValidateFalse( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StructWithValidateFalse) (errs field.ErrorList) { + // field StructWithValidateFalse.TypeMeta has no validation - // field StructWithValidateFalse.ValidateFalse - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructWithValidateFalse.ValidateFalse + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "always fails").MarkAlpha()...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "always fails").MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("validateFalse"), obj.ValidateFalse, safe.Field(oldObj, func(oldObj *StructWithValidateFalse) *string { return oldObj.ValidateFalse }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructWithValidateFalse) *string { + return oldObj.ValidateFalse + }) + errs = append(errs, fn(fldPath.Child("validateFalse"), obj.ValidateFalse, oldVal, oldObj != nil)...) + } - // field StructWithValidateFalse.ValidateFalseBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field StructWithValidateFalse.ValidateFalseBeta + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "always fails").MarkBeta()...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "always fails").MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("validateFalseBeta"), obj.ValidateFalseBeta, safe.Field(oldObj, func(oldObj *StructWithValidateFalse) *string { return oldObj.ValidateFalseBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *StructWithValidateFalse) *string { + return oldObj.ValidateFalseBeta + }) + errs = append(errs, fn(fldPath.Child("validateFalseBeta"), obj.ValidateFalseBeta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/structs/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/structs/zz_generated.validations.go index cf0a41b7def..e4adf284daa 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/structs/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/structs/zz_generated.validations.go @@ -39,121 +39,223 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ConditionalStruct - scheme.AddValidationFunc((*ConditionalStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ConditionalStruct(ctx, op, nil /* fldPath */, obj.(*ConditionalStruct), safe.Cast[*ConditionalStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ConditionalStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ConditionalStruct( + ctx, op, nil, /* fldPath */ + obj.(*ConditionalStruct), + safe.Cast[*ConditionalStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type MixedStruct - scheme.AddValidationFunc((*MixedStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MixedStruct(ctx, op, nil /* fldPath */, obj.(*MixedStruct), safe.Cast[*MixedStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MixedStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MixedStruct( + ctx, op, nil, /* fldPath */ + obj.(*MixedStruct), + safe.Cast[*MixedStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ConditionalStruct validates an instance of ConditionalStruct according // to declarative validation rules in the API schema. -func Validate_ConditionalStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ConditionalStruct) (errs field.ErrorList) { +func Validate_ConditionalStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ConditionalStruct) (errs field.ErrorList) { + // field ConditionalStruct.TypeMeta has no validation - // field ConditionalStruct.ConditionalField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ConditionalStruct.ConditionalField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "MyFeature", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - }).MarkAlpha()...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "MyFeature", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("conditionalField"), &obj.ConditionalField, safe.Field(oldObj, func(oldObj *ConditionalStruct) *int { return &oldObj.ConditionalField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ConditionalStruct) *int { + return &oldObj.ConditionalField + }) + errs = append(errs, fn(fldPath.Child("conditionalField"), &obj.ConditionalField, oldVal, oldObj != nil)...) + } - // field ConditionalStruct.ConditionalFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ConditionalStruct.ConditionalFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "MyFeature", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) - }).MarkBeta()...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "MyFeature", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 10) + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("conditionalFieldBeta"), &obj.ConditionalFieldBeta, safe.Field(oldObj, func(oldObj *ConditionalStruct) *int { return &oldObj.ConditionalFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ConditionalStruct) *int { + return &oldObj.ConditionalFieldBeta + }) + errs = append(errs, fn(fldPath.Child("conditionalFieldBeta"), &obj.ConditionalFieldBeta, oldVal, oldObj != nil)...) + } - // field ConditionalStruct.RecursiveAlpha - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ConditionalStruct.RecursiveAlpha + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 20).MarkAlpha()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 20).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("recursiveAlpha"), &obj.RecursiveAlpha, safe.Field(oldObj, func(oldObj *ConditionalStruct) *int { return &oldObj.RecursiveAlpha }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ConditionalStruct) *int { + return &oldObj.RecursiveAlpha + }) + errs = append(errs, fn(fldPath.Child("recursiveAlpha"), &obj.RecursiveAlpha, oldVal, oldObj != nil)...) + } - // field ConditionalStruct.RecursiveBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ConditionalStruct.RecursiveBeta + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 20).MarkBeta()...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 20).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("recursiveBeta"), &obj.RecursiveBeta, safe.Field(oldObj, func(oldObj *ConditionalStruct) *int { return &oldObj.RecursiveBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ConditionalStruct) *int { + return &oldObj.RecursiveBeta + }) + errs = append(errs, fn(fldPath.Child("recursiveBeta"), &obj.RecursiveBeta, oldVal, oldObj != nil)...) + } return errs } // Validate_MixedStruct validates an instance of MixedStruct according // to declarative validation rules in the API schema. -func Validate_MixedStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedStruct) (errs field.ErrorList) { +func Validate_MixedStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MixedStruct) (errs field.ErrorList) { + // field MixedStruct.TypeMeta has no validation - // field MixedStruct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MixedStruct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 5)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 5); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *MixedStruct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MixedStruct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field MixedStruct.IntFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MixedStruct.IntFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta()...) - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 5)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 10).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 5); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intFieldBeta"), &obj.IntFieldBeta, safe.Field(oldObj, func(oldObj *MixedStruct) *int { return &oldObj.IntFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MixedStruct) *int { + return &oldObj.IntFieldBeta + }) + errs = append(errs, fn(fldPath.Child("intFieldBeta"), &obj.IntFieldBeta, oldVal, oldObj != nil)...) + } - // field MixedStruct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MixedStruct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -169,14 +271,24 @@ func Validate_MixedStruct(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *MixedStruct) []string { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MixedStruct) []string { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field MixedStruct.ListFieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MixedStruct.ListFieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -192,7 +304,13 @@ func Validate_MixedStruct(ctx context.Context, op operation.Operation, fldPath * return // do not proceed } return - }(fldPath.Child("listFieldBeta"), obj.ListFieldBeta, safe.Field(oldObj, func(oldObj *MixedStruct) []string { return oldObj.ListFieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MixedStruct) []string { + return oldObj.ListFieldBeta + }) + errs = append(errs, fn(fldPath.Child("listFieldBeta"), obj.ListFieldBeta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/subfields/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/subfields/zz_generated.validations.go index b32f6c0f275..91d2ba62699 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/subfields/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/subfields/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,62 +60,107 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Subfield - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *SubStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Subfield + fn := func( + fldPath *field.Path, + obj, oldObj *SubStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - func() { // cohort inner - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "inner", func(o *SubStruct) *int { return &o.Inner }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 5) - }).MarkAlpha()...) + func() { // cohort = "inner" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "inner", + func(o *SubStruct) *int { return &o.Inner }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 5) + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("subfield"), &obj.Subfield, safe.Field(oldObj, func(oldObj *Struct) *SubStruct { return &oldObj.Subfield }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *SubStruct { + return &oldObj.Subfield + }) + errs = append(errs, fn(fldPath.Child("subfield"), &obj.Subfield, oldVal, oldObj != nil)...) + } - // field Struct.SubfieldBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *SubStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SubfieldBeta + fn := func( + fldPath *field.Path, + obj, oldObj *SubStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - func() { // cohort inner - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "inner", func(o *SubStruct) *int { return &o.Inner }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { - return validate.Minimum(ctx, op, fldPath, obj, oldObj, 5) - }).MarkBeta()...) + func() { // cohort = "inner" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "inner", + func(o *SubStruct) *int { return &o.Inner }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *int) field.ErrorList { + return validate.Minimum(ctx, op, fldPath, obj, oldObj, 5) + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("subfieldBeta"), &obj.SubfieldBeta, safe.Field(oldObj, func(oldObj *Struct) *SubStruct { return &oldObj.SubfieldBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *SubStruct { + return &oldObj.SubfieldBeta + }) + errs = append(errs, fn(fldPath.Child("subfieldBeta"), &obj.SubfieldBeta, oldVal, oldObj != nil)...) + } - // field Struct.UnionField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *SubUnion, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UnionField + fn := func( + fldPath *field.Path, + obj, oldObj *SubUnion, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_subfields_Struct_unionField_, func(obj *SubUnion) bool { - if obj == nil { - return false - } - return obj.Z1 != nil - }, func(obj *SubUnion) bool { - if obj == nil { - return false - } - return obj.Z2 != nil - }).MarkAlpha()...) + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_subfields_Struct_unionField_, + func(obj *SubUnion) bool { + if obj == nil { + return false + } + return obj.Z1 != nil + }, + func(obj *SubUnion) bool { + if obj == nil { + return false + } + return obj.Z2 != nil + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("unionField"), &obj.UnionField, safe.Field(oldObj, func(oldObj *Struct) *SubUnion { return &oldObj.UnionField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *SubUnion { + return &oldObj.UnionField + }) + errs = append(errs, fn(fldPath.Child("unionField"), &obj.UnionField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/unions/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/unions/zz_generated.validations.go index e09b97d3d93..076fefb8c06 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/unions/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/unions/zz_generated.validations.go @@ -39,53 +39,95 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type MyListStruct - scheme.AddValidationFunc((*MyListStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MyListStruct(ctx, op, nil /* fldPath */, obj.(*MyListStruct), safe.Cast[*MyListStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MyListStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MyListStruct( + ctx, op, nil, /* fldPath */ + obj.(*MyListStruct), + safe.Cast[*MyListStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type MyListStructBeta - scheme.AddValidationFunc((*MyListStructBeta)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MyListStructBeta(ctx, op, nil /* fldPath */, obj.(*MyListStructBeta), safe.Cast[*MyListStructBeta](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MyListStructBeta)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MyListStructBeta( + ctx, op, nil, /* fldPath */ + obj.(*MyListStructBeta), + safe.Cast[*MyListStructBeta](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type MyStruct - scheme.AddValidationFunc((*MyStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MyStruct(ctx, op, nil /* fldPath */, obj.(*MyStruct), safe.Cast[*MyStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MyStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MyStruct( + ctx, op, nil, /* fldPath */ + obj.(*MyStruct), + safe.Cast[*MyStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type MyStructBeta - scheme.AddValidationFunc((*MyStructBeta)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MyStructBeta(ctx, op, nil /* fldPath */, obj.(*MyStructBeta), safe.Cast[*MyStructBeta](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MyStructBeta)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MyStructBeta( + ctx, op, nil, /* fldPath */ + obj.(*MyStructBeta), + safe.Cast[*MyStructBeta](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type UnionStructBeta - scheme.AddValidationFunc((*UnionStructBeta)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_UnionStructBeta(ctx, op, nil /* fldPath */, obj.(*UnionStructBeta), safe.Cast[*UnionStructBeta](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*UnionStructBeta)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_UnionStructBeta( + ctx, op, nil, /* fldPath */ + obj.(*UnionStructBeta), + safe.Cast[*UnionStructBeta](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -93,36 +135,56 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_MyListStruct validates an instance of MyListStruct according // to declarative validation rules in the API schema. -func Validate_MyListStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MyListStruct) (errs field.ErrorList) { +func Validate_MyListStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MyListStruct) (errs field.ErrorList) { + // field MyListStruct.TypeMeta has no validation - // field MyListStruct.Tasks - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Task, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyListStruct.Tasks + fn := func( + fldPath *field.Path, + obj, oldObj []Task, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyListStruct_tasks_, func(list []Task) bool { - for i := range list { - if list[i].Name == "failed" { - return true + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyListStruct_tasks_, + func(list []Task) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } } - } - return false - }, func(list []Task) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true + return false + }, + func(list []Task) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } } - } - return false - }).MarkAlpha()...) + return false + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tasks"), obj.Tasks, safe.Field(oldObj, func(oldObj *MyListStruct) []Task { return oldObj.Tasks }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyListStruct) []Task { + return oldObj.Tasks + }) + errs = append(errs, fn(fldPath.Child("tasks"), obj.Tasks, oldVal, oldObj != nil)...) + } return errs } @@ -131,36 +193,56 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_MyListStructBeta validates an instance of MyListStructBeta according // to declarative validation rules in the API schema. -func Validate_MyListStructBeta(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MyListStructBeta) (errs field.ErrorList) { +func Validate_MyListStructBeta( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MyListStructBeta) (errs field.ErrorList) { + // field MyListStructBeta.TypeMeta has no validation - // field MyListStructBeta.TasksBeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Task, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyListStructBeta.TasksBeta + fn := func( + fldPath *field.Path, + obj, oldObj []Task, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyListStructBeta_tasksBeta_, func(list []Task) bool { - for i := range list { - if list[i].Name == "failed" { - return true + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyListStructBeta_tasksBeta_, + func(list []Task) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } } - } - return false - }, func(list []Task) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true + return false + }, + func(list []Task) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } } - } - return false - }).MarkBeta()...) + return false + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("tasksBeta"), obj.TasksBeta, safe.Field(oldObj, func(oldObj *MyListStructBeta) []Task { return oldObj.TasksBeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyListStructBeta) []Task { + return oldObj.TasksBeta + }) + errs = append(errs, fn(fldPath.Child("tasksBeta"), obj.TasksBeta, oldVal, oldObj != nil)...) + } return errs } @@ -169,27 +251,38 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_MyStruct validates an instance of MyStruct according // to declarative validation rules in the API schema. -func Validate_MyStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MyStruct) (errs field.ErrorList) { - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyStruct_, func(obj *MyStruct) bool { - if obj == nil { - return false - } - return obj.Z1 != nil - }, func(obj *MyStruct) bool { - if obj == nil { - return false - } - return obj.Z2 != nil - }).MarkAlpha()...) +func Validate_MyStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MyStruct) (errs field.ErrorList) { + + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyStruct_, + func(obj *MyStruct) bool { + if obj == nil { + return false + } + return obj.Z1 != nil + }, + func(obj *MyStruct) bool { + if obj == nil { + return false + } + return obj.Z2 != nil + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // field MyStruct.TypeMeta has no validation - // field MyStruct.Z1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Z1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyStruct.Z1 + fn := func( + fldPath *field.Path, + obj, oldObj *Z1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -200,14 +293,24 @@ func Validate_MyStruct(ctx context.Context, op operation.Operation, fldPath *fie return // do not proceed } return - }(fldPath.Child("z1"), obj.Z1, safe.Field(oldObj, func(oldObj *MyStruct) *Z1 { return oldObj.Z1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyStruct) *Z1 { + return oldObj.Z1 + }) + errs = append(errs, fn(fldPath.Child("z1"), obj.Z1, oldVal, oldObj != nil)...) + } - // field MyStruct.Z2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Z2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyStruct.Z2 + fn := func( + fldPath *field.Path, + obj, oldObj *Z2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -218,7 +321,13 @@ func Validate_MyStruct(ctx context.Context, op operation.Operation, fldPath *fie return // do not proceed } return - }(fldPath.Child("z2"), obj.Z2, safe.Field(oldObj, func(oldObj *MyStruct) *Z2 { return oldObj.Z2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyStruct) *Z2 { + return oldObj.Z2 + }) + errs = append(errs, fn(fldPath.Child("z2"), obj.Z2, oldVal, oldObj != nil)...) + } return errs } @@ -227,27 +336,38 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_MyStructBeta validates an instance of MyStructBeta according // to declarative validation rules in the API schema. -func Validate_MyStructBeta(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MyStructBeta) (errs field.ErrorList) { - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyStructBeta_, func(obj *MyStructBeta) bool { - if obj == nil { - return false - } - return obj.Z1Beta != nil - }, func(obj *MyStructBeta) bool { - if obj == nil { - return false - } - return obj.Z2Beta != nil - }).MarkBeta()...) +func Validate_MyStructBeta( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MyStructBeta) (errs field.ErrorList) { + + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_MyStructBeta_, + func(obj *MyStructBeta) bool { + if obj == nil { + return false + } + return obj.Z1Beta != nil + }, + func(obj *MyStructBeta) bool { + if obj == nil { + return false + } + return obj.Z2Beta != nil + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } // field MyStructBeta.TypeMeta has no validation - // field MyStructBeta.Z1Beta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *BetaZ1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyStructBeta.Z1Beta + fn := func( + fldPath *field.Path, + obj, oldObj *BetaZ1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -258,14 +378,24 @@ func Validate_MyStructBeta(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("z1Beta"), obj.Z1Beta, safe.Field(oldObj, func(oldObj *MyStructBeta) *BetaZ1 { return oldObj.Z1Beta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyStructBeta) *BetaZ1 { + return oldObj.Z1Beta + }) + errs = append(errs, fn(fldPath.Child("z1Beta"), obj.Z1Beta, oldVal, oldObj != nil)...) + } - // field MyStructBeta.Z2Beta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *BetaZ2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field MyStructBeta.Z2Beta + fn := func( + fldPath *field.Path, + obj, oldObj *BetaZ2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -276,7 +406,13 @@ func Validate_MyStructBeta(ctx context.Context, op operation.Operation, fldPath return // do not proceed } return - }(fldPath.Child("z2Beta"), obj.Z2Beta, safe.Field(oldObj, func(oldObj *MyStructBeta) *BetaZ2 { return oldObj.Z2Beta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *MyStructBeta) *BetaZ2 { + return oldObj.Z2Beta + }) + errs = append(errs, fn(fldPath.Child("z2Beta"), obj.Z2Beta, oldVal, oldObj != nil)...) + } return errs } @@ -285,33 +421,45 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_Struct_, func(obj *Struct) string { - if obj == nil { - return "" - } - return string(obj.D) - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - }).MarkAlpha()...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_Struct_, + func(obj *Struct) string { + if obj == nil { + return "" + } + return string(obj.D) + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.D has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -322,14 +470,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } - // field Struct.M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -340,7 +498,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m2"), obj.M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.M2 + }) + errs = append(errs, fn(fldPath.Child("m2"), obj.M2, oldVal, oldObj != nil)...) + } return errs } @@ -349,33 +513,45 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_UnionStructBeta validates an instance of UnionStructBeta according // to declarative validation rules in the API schema. -func Validate_UnionStructBeta(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnionStructBeta) (errs field.ErrorList) { - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_UnionStructBeta_, func(obj *UnionStructBeta) string { - if obj == nil { - return "" - } - return string(obj.DBeta) - }, func(obj *UnionStructBeta) bool { - if obj == nil { - return false - } - return obj.M1Beta != nil - }, func(obj *UnionStructBeta) bool { - if obj == nil { - return false - } - return obj.M2Beta != nil - }).MarkBeta()...) +func Validate_UnionStructBeta( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *UnionStructBeta) (errs field.ErrorList) { + + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_levels_unions_UnionStructBeta_, + func(obj *UnionStructBeta) string { + if obj == nil { + return "" + } + return string(obj.DBeta) + }, + func(obj *UnionStructBeta) bool { + if obj == nil { + return false + } + return obj.M1Beta != nil + }, + func(obj *UnionStructBeta) bool { + if obj == nil { + return false + } + return obj.M2Beta != nil + }).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } // field UnionStructBeta.TypeMeta has no validation // field UnionStructBeta.DBeta has no validation - // field UnionStructBeta.M1Beta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *BetaM1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UnionStructBeta.M1Beta + fn := func( + fldPath *field.Path, + obj, oldObj *BetaM1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -386,14 +562,24 @@ func Validate_UnionStructBeta(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("m1Beta"), obj.M1Beta, safe.Field(oldObj, func(oldObj *UnionStructBeta) *BetaM1 { return oldObj.M1Beta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UnionStructBeta) *BetaM1 { + return oldObj.M1Beta + }) + errs = append(errs, fn(fldPath.Child("m1Beta"), obj.M1Beta, oldVal, oldObj != nil)...) + } - // field UnionStructBeta.M2Beta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *BetaM2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UnionStructBeta.M2Beta + fn := func( + fldPath *field.Path, + obj, oldObj *BetaM2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -404,7 +590,13 @@ func Validate_UnionStructBeta(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("m2Beta"), obj.M2Beta, safe.Field(oldObj, func(oldObj *UnionStructBeta) *BetaM2 { return oldObj.M2Beta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UnionStructBeta) *BetaM2 { + return oldObj.M2Beta + }) + errs = append(errs, fn(fldPath.Child("m2Beta"), obj.M2Beta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/uniquetag/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/uniquetag/zz_generated.validations.go index d9f3bcf66c3..f6b8b49e2e3 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/uniquetag/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/levels/uniquetag/zz_generated.validations.go @@ -39,46 +39,80 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type UniqueStruct - scheme.AddValidationFunc((*UniqueStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_UniqueStruct(ctx, op, nil /* fldPath */, obj.(*UniqueStruct), safe.Cast[*UniqueStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*UniqueStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_UniqueStruct( + ctx, op, nil, /* fldPath */ + obj.(*UniqueStruct), + safe.Cast[*UniqueStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_UniqueStruct validates an instance of UniqueStruct according // to declarative validation rules in the API schema. -func Validate_UniqueStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UniqueStruct) (errs field.ErrorList) { +func Validate_UniqueStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *UniqueStruct) (errs field.ErrorList) { + // field UniqueStruct.TypeMeta has no validation - // field UniqueStruct.AlphaUniqueSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UniqueStruct.AlphaUniqueSet + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("alphaUniqueSet"), obj.AlphaUniqueSet, safe.Field(oldObj, func(oldObj *UniqueStruct) []string { return oldObj.AlphaUniqueSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UniqueStruct) []string { + return oldObj.AlphaUniqueSet + }) + errs = append(errs, fn(fldPath.Child("alphaUniqueSet"), obj.AlphaUniqueSet, oldVal, oldObj != nil)...) + } - // field UniqueStruct.BetaUniqueSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UniqueStruct.BetaUniqueSet + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkBeta()...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual).MarkBeta(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("betaUniqueSet"), obj.BetaUniqueSet, safe.Field(oldObj, func(oldObj *UniqueStruct) []string { return oldObj.BetaUniqueSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UniqueStruct) []string { + return oldObj.BetaUniqueSet + }) + errs = append(errs, fn(fldPath.Child("betaUniqueSet"), obj.BetaUniqueSet, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/multiple_keys/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/multiple_keys/zz_generated.validations.go index 5c72158fa3d..443949cecb9 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/multiple_keys/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/multiple_keys/zz_generated.validations.go @@ -39,44 +39,65 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ListType validates an instance of ListType according // to declarative validation rules in the API schema. -func Validate_ListType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ListType) (errs field.ErrorList) { +func Validate_ListType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ListType) (errs field.ErrorList) { + // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -84,24 +105,38 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherTypedefStruct, b OtherTypedefStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherTypedefStruct, b OtherTypedefStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -109,24 +144,38 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherTypedefStruct, b OtherTypedefStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherTypedefStruct, b OtherTypedefStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.ListTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ListType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj ListType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -136,91 +185,165 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field // call the type's validation function errs = append(errs, Validate_ListType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefField"), obj.TypedefField, safe.Field(oldObj, func(oldObj *Struct) ListType { return oldObj.TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ListType { + return oldObj.TypedefField + }) + errs = append(errs, fn(fldPath.Child("typedefField"), obj.TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ListComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listComparableField"), obj.ListComparableField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListComparableField + }) + errs = append(errs, fn(fldPath.Child("listComparableField"), obj.ListComparableField, oldVal, oldObj != nil)...) + } - // field Struct.ListNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a NonComparableStruct, b NonComparableStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListNonComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a NonComparableStruct, b NonComparableStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListNonComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a NonComparableStruct, b NonComparableStruct) bool { - return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a NonComparableStruct, b NonComparableStruct) bool { + return a.Key1Field == b.Key1Field && a.Key2Field == b.Key2Field + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listNonComparableField"), obj.ListNonComparableField, safe.Field(oldObj, func(oldObj *Struct) []NonComparableStruct { return oldObj.ListNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []NonComparableStruct { + return oldObj.ListNonComparableField + }) + errs = append(errs, fn(fldPath.Child("listNonComparableField"), obj.ListNonComparableField, oldVal, oldObj != nil)...) + } - // field Struct.ListPtrKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []PtrKeyStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListPtrKeyField + fn := func( + fldPath *field.Path, + obj, oldObj []PtrKeyStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a PtrKeyStruct, b PtrKeyStruct) bool { - return ((a.Key1Field == nil && b.Key1Field == nil) || (a.Key1Field != nil && b.Key1Field != nil && *a.Key1Field == *b.Key1Field)) && a.Key2Field == b.Key2Field - })...) - func() { // cohort {"key1Field": "target-ptr", "key2Field": 42} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *PtrKeyStruct) bool { - return item.Key1Field != nil && *item.Key1Field == "target-ptr" && item.Key2Field == 42 - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrKeyStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ListPtrKeyField[key1Field=target-ptr,key2Field=42]") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a PtrKeyStruct, b PtrKeyStruct) bool { + return ((a.Key1Field == nil && b.Key1Field == nil) || (a.Key1Field != nil && b.Key1Field != nil && *a.Key1Field == *b.Key1Field)) && a.Key2Field == b.Key2Field + }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"key1Field": "target-ptr", "key2Field": 42}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *PtrKeyStruct) bool { + return item.Key1Field != nil && *item.Key1Field == "target-ptr" && item.Key2Field == 42 + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *PtrKeyStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ListPtrKeyField[key1Field=target-ptr,key2Field=42]") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("listPtrKeyField"), obj.ListPtrKeyField, safe.Field(oldObj, func(oldObj *Struct) []PtrKeyStruct { return oldObj.ListPtrKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []PtrKeyStruct { + return oldObj.ListPtrKeyField + }) + errs = append(errs, fn(fldPath.Child("listPtrKeyField"), obj.ListPtrKeyField, oldVal, oldObj != nil)...) + } - // field Struct.ListMixedPtrKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []MixedPtrKeyStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListMixedPtrKeyField + fn := func( + fldPath *field.Path, + obj, oldObj []MixedPtrKeyStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a MixedPtrKeyStruct, b MixedPtrKeyStruct) bool { - return ((a.StringPtrKey == nil && b.StringPtrKey == nil) || (a.StringPtrKey != nil && b.StringPtrKey != nil && *a.StringPtrKey == *b.StringPtrKey)) && a.StringKey == b.StringKey - })...) - func() { // cohort {"stringPtrKey": "target-ptr", "stringKey": "target"} - errs = append(errs, validate.SliceItem(ctx, op, fldPath, obj, oldObj, func(item *MixedPtrKeyStruct) bool { - return item.StringPtrKey != nil && *item.StringPtrKey == "target-ptr" && item.StringKey == "target" - }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedPtrKeyStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ListMixedPtrKeyField") - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a MixedPtrKeyStruct, b MixedPtrKeyStruct) bool { + return ((a.StringPtrKey == nil && b.StringPtrKey == nil) || (a.StringPtrKey != nil && b.StringPtrKey != nil && *a.StringPtrKey == *b.StringPtrKey)) && a.StringKey == b.StringKey + }); len(e) != 0 { + errs = append(errs, e...) + } + func() { // cohort = "{"stringPtrKey": "target-ptr", "stringKey": "target"}" + if e := validate.SliceItem(ctx, op, fldPath, obj, oldObj, + func(item *MixedPtrKeyStruct) bool { + return item.StringPtrKey != nil && *item.StringPtrKey == "target-ptr" && item.StringKey == "target" + }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MixedPtrKeyStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "item ListMixedPtrKeyField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("listMixedPtrKeyField"), obj.ListMixedPtrKeyField, safe.Field(oldObj, func(oldObj *Struct) []MixedPtrKeyStruct { return oldObj.ListMixedPtrKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []MixedPtrKeyStruct { + return oldObj.ListMixedPtrKeyField + }) + errs = append(errs, fn(fldPath.Child("listMixedPtrKeyField"), obj.ListMixedPtrKeyField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/single_key/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/single_key/zz_generated.validations.go index d3e10565ba4..0a1bedde8c0 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/single_key/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listmap/single_key/zz_generated.validations.go @@ -39,40 +39,61 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ListType validates an instance of ListType according // to declarative validation rules in the API schema. -func Validate_ListType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ListType) (errs field.ErrorList) { +func Validate_ListType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ListType) (errs field.ErrorList) { + // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ListField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -80,20 +101,34 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listField"), obj.ListField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListField + }) + errs = append(errs, fn(fldPath.Child("listField"), obj.ListField, oldVal, oldObj != nil)...) + } - // field Struct.ListTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherTypedefStruct, b OtherTypedefStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherTypedefStruct, b OtherTypedefStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -101,20 +136,34 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherTypedefStruct, b OtherTypedefStruct) bool { return a.KeyField == b.KeyField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherTypedefStruct, b OtherTypedefStruct) bool { return a.KeyField == b.KeyField }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listTypedefField"), obj.ListTypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.ListTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.ListTypedefField + }) + errs = append(errs, fn(fldPath.Child("listTypedefField"), obj.ListTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ListType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj ListType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, validate.Immutable); len(e) != 0 { + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, validate.Immutable); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -124,54 +173,107 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field // call the type's validation function errs = append(errs, Validate_ListType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefField"), obj.TypedefField, safe.Field(oldObj, func(oldObj *Struct) ListType { return oldObj.TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ListType { + return oldObj.TypedefField + }) + errs = append(errs, fn(fldPath.Child("typedefField"), obj.TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ListComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.KeyField == b.KeyField }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listComparableField"), obj.ListComparableField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListComparableField + }) + errs = append(errs, fn(fldPath.Child("listComparableField"), obj.ListComparableField, oldVal, oldObj != nil)...) + } - // field Struct.ListNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a NonComparableStruct, b NonComparableStruct) bool { return a.KeyField == b.KeyField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListNonComparableField[*]") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a NonComparableStruct, b NonComparableStruct) bool { return a.KeyField == b.KeyField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonComparableStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListNonComparableField[*]") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a NonComparableStruct, b NonComparableStruct) bool { return a.KeyField == b.KeyField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a NonComparableStruct, b NonComparableStruct) bool { return a.KeyField == b.KeyField }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listNonComparableField"), obj.ListNonComparableField, safe.Field(oldObj, func(oldObj *Struct) []NonComparableStruct { return oldObj.ListNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []NonComparableStruct { + return oldObj.ListNonComparableField + }) + errs = append(errs, fn(fldPath.Child("listNonComparableField"), obj.ListNonComparableField, oldVal, oldObj != nil)...) + } - // field Struct.ListPtrKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []PtrKeyStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListPtrKeyField + fn := func( + fldPath *field.Path, + obj, oldObj []PtrKeyStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a PtrKeyStruct, b PtrKeyStruct) bool { - return ((a.KeyField == nil && b.KeyField == nil) || (a.KeyField != nil && b.KeyField != nil && *a.KeyField == *b.KeyField)) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a PtrKeyStruct, b PtrKeyStruct) bool { + return ((a.KeyField == nil && b.KeyField == nil) || (a.KeyField != nil && b.KeyField != nil && *a.KeyField == *b.KeyField)) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listPtrKeyField"), obj.ListPtrKeyField, safe.Field(oldObj, func(oldObj *Struct) []PtrKeyStruct { return oldObj.ListPtrKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []PtrKeyStruct { + return oldObj.ListPtrKeyField + }) + errs = append(errs, fn(fldPath.Child("listPtrKeyField"), obj.ListPtrKeyField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listset/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listset/zz_generated.validations.go index 59c8ea9c77a..10e1e89a529 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listset/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/listset/zz_generated.validations.go @@ -39,35 +39,56 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ImmutableStruct - scheme.AddValidationFunc((*ImmutableStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ImmutableStruct(ctx, op, nil /* fldPath */, obj.(*ImmutableStruct), safe.Cast[*ImmutableStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ImmutableStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ImmutableStruct( + ctx, op, nil, /* fldPath */ + obj.(*ImmutableStruct), + safe.Cast[*ImmutableStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ImmutableStruct validates an instance of ImmutableStruct according // to declarative validation rules in the API schema. -func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ImmutableStruct) (errs field.ErrorList) { +func Validate_ImmutableStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ImmutableStruct) (errs field.ErrorList) { + // field ImmutableStruct.TypeMeta has no validation - // field ImmutableStruct.SliceComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ImmutableStruct.SliceComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -79,14 +100,24 @@ func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("sliceComparableField"), obj.SliceComparableField, safe.Field(oldObj, func(oldObj *ImmutableStruct) []ComparableStruct { return oldObj.SliceComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ImmutableStruct) []ComparableStruct { + return oldObj.SliceComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceComparableField"), obj.SliceComparableField, oldVal, oldObj != nil)...) + } - // field ImmutableStruct.SliceSetComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ImmutableStruct.SliceSetComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -98,16 +129,28 @@ func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceSetComparableField"), obj.SliceSetComparableField, safe.Field(oldObj, func(oldObj *ImmutableStruct) []ComparableStruct { return oldObj.SliceSetComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ImmutableStruct) []ComparableStruct { + return oldObj.SliceSetComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceSetComparableField"), obj.SliceSetComparableField, oldVal, oldObj != nil)...) + } - // field ImmutableStruct.SliceNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ImmutableStruct.SliceNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -119,14 +162,24 @@ func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("sliceNonComparableField"), obj.SliceNonComparableField, safe.Field(oldObj, func(oldObj *ImmutableStruct) []NonComparableStruct { return oldObj.SliceNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ImmutableStruct) []NonComparableStruct { + return oldObj.SliceNonComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceNonComparableField"), obj.SliceNonComparableField, oldVal, oldObj != nil)...) + } - // field ImmutableStruct.SliceSetNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ImmutableStruct.SliceSetNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -138,16 +191,28 @@ func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceSetNonComparableField"), obj.SliceSetNonComparableField, safe.Field(oldObj, func(oldObj *ImmutableStruct) []NonComparableStruct { return oldObj.SliceSetNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ImmutableStruct) []NonComparableStruct { + return oldObj.SliceSetNonComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceSetNonComparableField"), obj.SliceSetNonComparableField, oldVal, oldObj != nil)...) + } - // field ImmutableStruct.SlicePrimitiveField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ImmutableStruct.SlicePrimitiveField + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -159,14 +224,24 @@ func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("slicePrimitiveField"), obj.SlicePrimitiveField, safe.Field(oldObj, func(oldObj *ImmutableStruct) []int { return oldObj.SlicePrimitiveField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ImmutableStruct) []int { + return oldObj.SlicePrimitiveField + }) + errs = append(errs, fn(fldPath.Child("slicePrimitiveField"), obj.SlicePrimitiveField, oldVal, oldObj != nil)...) + } - // field ImmutableStruct.SliceSetPrimitiveField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ImmutableStruct.SliceSetPrimitiveField + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -178,16 +253,28 @@ func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceSetPrimitiveField"), obj.SliceSetPrimitiveField, safe.Field(oldObj, func(oldObj *ImmutableStruct) []int { return oldObj.SliceSetPrimitiveField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ImmutableStruct) []int { + return oldObj.SliceSetPrimitiveField + }) + errs = append(errs, fn(fldPath.Child("sliceSetPrimitiveField"), obj.SliceSetPrimitiveField, oldVal, oldObj != nil)...) + } - // field ImmutableStruct.SliceSetFalselyComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []FalselyComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field ImmutableStruct.SliceSetFalselyComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []FalselyComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -199,82 +286,153 @@ func Validate_ImmutableStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceSetFalselyComparableField"), obj.SliceSetFalselyComparableField, safe.Field(oldObj, func(oldObj *ImmutableStruct) []FalselyComparableStruct { return oldObj.SliceSetFalselyComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *ImmutableStruct) []FalselyComparableStruct { + return oldObj.SliceSetFalselyComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceSetFalselyComparableField"), obj.SliceSetFalselyComparableField, oldVal, oldObj != nil)...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.SliceStringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceStringField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceStringField"), obj.SliceStringField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.SliceStringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.SliceStringField + }) + errs = append(errs, fn(fldPath.Child("sliceStringField"), obj.SliceStringField, oldVal, oldObj != nil)...) + } - // field Struct.SliceIntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceIntField + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceIntField"), obj.SliceIntField, safe.Field(oldObj, func(oldObj *Struct) []int { return oldObj.SliceIntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []int { + return oldObj.SliceIntField + }) + errs = append(errs, fn(fldPath.Child("sliceIntField"), obj.SliceIntField, oldVal, oldObj != nil)...) + } - // field Struct.SliceComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []ComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceComparableField"), obj.SliceComparableField, safe.Field(oldObj, func(oldObj *Struct) []ComparableStruct { return oldObj.SliceComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ComparableStruct { + return oldObj.SliceComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceComparableField"), obj.SliceComparableField, oldVal, oldObj != nil)...) + } - // field Struct.SliceNonComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceNonComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceNonComparableField"), obj.SliceNonComparableField, safe.Field(oldObj, func(oldObj *Struct) []NonComparableStruct { return oldObj.SliceNonComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []NonComparableStruct { + return oldObj.SliceNonComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceNonComparableField"), obj.SliceNonComparableField, oldVal, oldObj != nil)...) + } - // field Struct.SliceFalselyComparableField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []FalselyComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceFalselyComparableField + fn := func( + fldPath *field.Path, + obj, oldObj []FalselyComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceFalselyComparableField"), obj.SliceFalselyComparableField, safe.Field(oldObj, func(oldObj *Struct) []FalselyComparableStruct { return oldObj.SliceFalselyComparableField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []FalselyComparableStruct { + return oldObj.SliceFalselyComparableField + }) + errs = append(errs, fn(fldPath.Child("sliceFalselyComparableField"), obj.SliceFalselyComparableField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxbytes/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxbytes/zz_generated.validations.go index 4f93d9945a8..2235d12c352 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxbytes/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxbytes/zz_generated.validations.go @@ -38,180 +38,336 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Max0Type validates an instance of Max0Type according // to declarative validation rules in the API schema. -func Validate_Max0Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Max0Type) (errs field.ErrorList) { - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0)...) +func Validate_Max0Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Max0Type) (errs field.ErrorList) { + + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Max10Type validates an instance of Max10Type according // to declarative validation rules in the API schema. -func Validate_Max10Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Max10Type) (errs field.ErrorList) { - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10)...) +func Validate_Max10Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Max10Type) (errs field.ErrorList) { + + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Max0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0Field + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0Field"), &obj.Max0Field, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.Max0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.Max0Field + }) + errs = append(errs, fn(fldPath.Child("max0Field"), &obj.Max0Field, oldVal, oldObj != nil)...) + } - // field Struct.Max0PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0PtrField"), obj.Max0PtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Max0PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Max0PtrField + }) + errs = append(errs, fn(fldPath.Child("max0PtrField"), obj.Max0PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10Field + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10Field"), &obj.Max10Field, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.Max10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.Max10Field + }) + errs = append(errs, fn(fldPath.Child("max10Field"), &obj.Max10Field, oldVal, oldObj != nil)...) + } - // field Struct.Max10PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10PtrField"), obj.Max10PtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Max10PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Max10PtrField + }) + errs = append(errs, fn(fldPath.Child("max10PtrField"), obj.Max10PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max0UnvalidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0UnvalidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0UnvalidatedTypedefField"), &obj.Max0UnvalidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return &oldObj.Max0UnvalidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return &oldObj.Max0UnvalidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max0UnvalidatedTypedefField"), &obj.Max0UnvalidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max0UnvalidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0UnvalidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0UnvalidatedTypedefPtrField"), obj.Max0UnvalidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return oldObj.Max0UnvalidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return oldObj.Max0UnvalidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max0UnvalidatedTypedefPtrField"), obj.Max0UnvalidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max10UnvalidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10UnvalidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10UnvalidatedTypedefField"), &obj.Max10UnvalidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return &oldObj.Max10UnvalidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return &oldObj.Max10UnvalidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max10UnvalidatedTypedefField"), &obj.Max10UnvalidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max10UnvalidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10UnvalidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxBytes(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10UnvalidatedTypedefPtrField"), obj.Max10UnvalidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return oldObj.Max10UnvalidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return oldObj.Max10UnvalidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max10UnvalidatedTypedefPtrField"), obj.Max10UnvalidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max0ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max0Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *Max0Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max0Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max0ValidatedTypedefField"), &obj.Max0ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *Max0Type { return &oldObj.Max0ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max0Type { + return &oldObj.Max0ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max0ValidatedTypedefField"), &obj.Max0ValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max0ValidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max0Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0ValidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Max0Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max0Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max0ValidatedTypedefPtrField"), obj.Max0ValidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *Max0Type { return oldObj.Max0ValidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max0Type { + return oldObj.Max0ValidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max0ValidatedTypedefPtrField"), obj.Max0ValidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max10ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *Max10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max10ValidatedTypedefField"), &obj.Max10ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *Max10Type { return &oldObj.Max10ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max10Type { + return &oldObj.Max10ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max10ValidatedTypedefField"), &obj.Max10ValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max10ValidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10ValidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Max10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max10ValidatedTypedefPtrField"), obj.Max10ValidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *Max10Type { return oldObj.Max10ValidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max10Type { + return oldObj.Max10ValidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max10ValidatedTypedefPtrField"), obj.Max10ValidatedTypedefPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maximum/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maximum/zz_generated.validations.go index 000d3f02b0f..0e745e3ee86 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maximum/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maximum/zz_generated.validations.go @@ -38,172 +38,327 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_IntType validates an instance of IntType according // to declarative validation rules in the API schema. -func Validate_IntType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntType) (errs field.ErrorList) { - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) +func Validate_IntType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *IntType) (errs field.ErrorList) { + + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Int16Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int16, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Int16Field + fn := func( + fldPath *field.Path, + obj, oldObj *int16, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("int16Field"), &obj.Int16Field, safe.Field(oldObj, func(oldObj *Struct) *int16 { return &oldObj.Int16Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int16 { + return &oldObj.Int16Field + }) + errs = append(errs, fn(fldPath.Child("int16Field"), &obj.Int16Field, oldVal, oldObj != nil)...) + } - // field Struct.Int32Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Int32Field + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("int32Field"), &obj.Int32Field, safe.Field(oldObj, func(oldObj *Struct) *int32 { return &oldObj.Int32Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int32 { + return &oldObj.Int32Field + }) + errs = append(errs, fn(fldPath.Child("int32Field"), &obj.Int32Field, oldVal, oldObj != nil)...) + } - // field Struct.Int64Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Int64Field + fn := func( + fldPath *field.Path, + obj, oldObj *int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("int64Field"), &obj.Int64Field, safe.Field(oldObj, func(oldObj *Struct) *int64 { return &oldObj.Int64Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int64 { + return &oldObj.Int64Field + }) + errs = append(errs, fn(fldPath.Child("int64Field"), &obj.Int64Field, oldVal, oldObj != nil)...) + } - // field Struct.UintField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UintField + fn := func( + fldPath *field.Path, + obj, oldObj *uint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uintField"), &obj.UintField, safe.Field(oldObj, func(oldObj *Struct) *uint { return &oldObj.UintField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint { + return &oldObj.UintField + }) + errs = append(errs, fn(fldPath.Child("uintField"), &obj.UintField, oldVal, oldObj != nil)...) + } - // field Struct.UintPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UintPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *uint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uintPtrField"), obj.UintPtrField, safe.Field(oldObj, func(oldObj *Struct) *uint { return oldObj.UintPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint { + return oldObj.UintPtrField + }) + errs = append(errs, fn(fldPath.Child("uintPtrField"), obj.UintPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Uint16Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint16, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Uint16Field + fn := func( + fldPath *field.Path, + obj, oldObj *uint16, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uint16Field"), &obj.Uint16Field, safe.Field(oldObj, func(oldObj *Struct) *uint16 { return &oldObj.Uint16Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint16 { + return &oldObj.Uint16Field + }) + errs = append(errs, fn(fldPath.Child("uint16Field"), &obj.Uint16Field, oldVal, oldObj != nil)...) + } - // field Struct.Uint32Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Uint32Field + fn := func( + fldPath *field.Path, + obj, oldObj *uint32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uint32Field"), &obj.Uint32Field, safe.Field(oldObj, func(oldObj *Struct) *uint32 { return &oldObj.Uint32Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint32 { + return &oldObj.Uint32Field + }) + errs = append(errs, fn(fldPath.Child("uint32Field"), &obj.Uint32Field, oldVal, oldObj != nil)...) + } - // field Struct.Uint64Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Uint64Field + fn := func( + fldPath *field.Path, + obj, oldObj *uint64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Maximum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Maximum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uint64Field"), &obj.Uint64Field, safe.Field(oldObj, func(oldObj *Struct) *uint64 { return &oldObj.Uint64Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint64 { + return &oldObj.Uint64Field + }) + errs = append(errs, fn(fldPath.Child("uint64Field"), &obj.Uint64Field, oldVal, oldObj != nil)...) + } - // field Struct.TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefField"), &obj.TypedefField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return &oldObj.TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return &oldObj.TypedefField + }) + errs = append(errs, fn(fldPath.Child("typedefField"), &obj.TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.TypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefPtrField"), obj.TypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return oldObj.TypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return oldObj.TypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("typedefPtrField"), obj.TypedefPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_primitive/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_primitive/zz_generated.validations.go index 31cba4d93f1..152590e6b12 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_primitive/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_primitive/zz_generated.validations.go @@ -39,27 +39,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Max0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0Field + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -71,14 +85,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max0Field"), obj.Max0Field, safe.Field(oldObj, func(oldObj *Struct) []int { return oldObj.Max0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []int { + return oldObj.Max0Field + }) + errs = append(errs, fn(fldPath.Child("max0Field"), obj.Max0Field, oldVal, oldObj != nil)...) + } - // field Struct.Max10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10Field + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -90,14 +114,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max10Field"), obj.Max10Field, safe.Field(oldObj, func(oldObj *Struct) []int { return oldObj.Max10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []int { + return oldObj.Max10Field + }) + errs = append(errs, fn(fldPath.Child("max10Field"), obj.Max10Field, oldVal, oldObj != nil)...) + } - // field Struct.Max0TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -109,14 +143,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max0TypedefField"), obj.Max0TypedefField, safe.Field(oldObj, func(oldObj *Struct) []IntType { return oldObj.Max0TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []IntType { + return oldObj.Max0TypedefField + }) + errs = append(errs, fn(fldPath.Child("max0TypedefField"), obj.Max0TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max10TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -128,7 +172,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max10TypedefField"), obj.Max10TypedefField, safe.Field(oldObj, func(oldObj *Struct) []IntType { return oldObj.Max10TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []IntType { + return oldObj.Max10TypedefField + }) + errs = append(errs, fn(fldPath.Child("max10TypedefField"), obj.Max10TypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_struct/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_struct/zz_generated.validations.go index aeed32b4ac1..7a1deeca078 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_struct/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/slice_of_struct/zz_generated.validations.go @@ -39,27 +39,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Max0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0Field + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -71,14 +85,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max0Field"), obj.Max0Field, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.Max0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.Max0Field + }) + errs = append(errs, fn(fldPath.Child("max0Field"), obj.Max0Field, oldVal, oldObj != nil)...) + } - // field Struct.Max10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10Field + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -90,14 +114,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max10Field"), obj.Max10Field, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.Max10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.Max10Field + }) + errs = append(errs, fn(fldPath.Child("max10Field"), obj.Max10Field, oldVal, oldObj != nil)...) + } - // field Struct.Max0TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -109,14 +143,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max0TypedefField"), obj.Max0TypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.Max0TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.Max0TypedefField + }) + errs = append(errs, fn(fldPath.Child("max0TypedefField"), obj.Max0TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max10TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -128,7 +172,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max10TypedefField"), obj.Max10TypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.Max10TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.Max10TypedefField + }) + errs = append(errs, fn(fldPath.Child("max10TypedefField"), obj.Max10TypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/typedef_to_slice/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/typedef_to_slice/zz_generated.validations.go index f4d9e47ea71..201c0d2a8a7 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/typedef_to_slice/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxitems/typedef_to_slice/zz_generated.validations.go @@ -39,19 +39,29 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Max0Type validates an instance of Max0Type according // to declarative validation rules in the API schema. -func Validate_Max0Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Max0Type) (errs field.ErrorList) { +func Validate_Max0Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Max0Type) (errs field.ErrorList) { + earlyReturn := false if e := validate.MaxItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { errs = append(errs, e...) @@ -66,7 +76,10 @@ func Validate_Max0Type(ctx context.Context, op operation.Operation, fldPath *fie // Validate_Max0TypedefType validates an instance of Max0TypedefType according // to declarative validation rules in the API schema. -func Validate_Max0TypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Max0TypedefType) (errs field.ErrorList) { +func Validate_Max0TypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Max0TypedefType) (errs field.ErrorList) { + earlyReturn := false if e := validate.MaxItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { errs = append(errs, e...) @@ -81,7 +94,10 @@ func Validate_Max0TypedefType(ctx context.Context, op operation.Operation, fldPa // Validate_Max10Type validates an instance of Max10Type according // to declarative validation rules in the API schema. -func Validate_Max10Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Max10Type) (errs field.ErrorList) { +func Validate_Max10Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Max10Type) (errs field.ErrorList) { + earlyReturn := false if e := validate.MaxItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { errs = append(errs, e...) @@ -96,7 +112,10 @@ func Validate_Max10Type(ctx context.Context, op operation.Operation, fldPath *fi // Validate_Max10TypedefType validates an instance of Max10TypedefType according // to declarative validation rules in the API schema. -func Validate_Max10TypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Max10TypedefType) (errs field.ErrorList) { +func Validate_Max10TypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Max10TypedefType) (errs field.ErrorList) { + earlyReturn := false if e := validate.MaxItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { errs = append(errs, e...) @@ -111,57 +130,100 @@ func Validate_Max10TypedefType(ctx context.Context, op operation.Operation, fldP // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation // field Struct.UnvalidatedField has no validation - // field Struct.Max0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Max0Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0Field + fn := func( + fldPath *field.Path, + obj, oldObj Max0Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max0Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max0Field"), obj.Max0Field, safe.Field(oldObj, func(oldObj *Struct) Max0Type { return oldObj.Max0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Max0Type { + return oldObj.Max0Field + }) + errs = append(errs, fn(fldPath.Child("max0Field"), obj.Max0Field, oldVal, oldObj != nil)...) + } - // field Struct.Max10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Max10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10Field + fn := func( + fldPath *field.Path, + obj, oldObj Max10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max10Field"), obj.Max10Field, safe.Field(oldObj, func(oldObj *Struct) Max10Type { return oldObj.Max10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Max10Type { + return oldObj.Max10Field + }) + errs = append(errs, fn(fldPath.Child("max10Field"), obj.Max10Field, oldVal, oldObj != nil)...) + } - // field Struct.Max0TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Max0TypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj Max0TypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max0TypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max0TypedefField"), obj.Max0TypedefField, safe.Field(oldObj, func(oldObj *Struct) Max0TypedefType { return oldObj.Max0TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Max0TypedefType { + return oldObj.Max0TypedefField + }) + errs = append(errs, fn(fldPath.Child("max0TypedefField"), obj.Max0TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max10TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Max10TypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj Max10TypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max10TypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max10TypedefField"), obj.Max10TypedefField, safe.Field(oldObj, func(oldObj *Struct) Max10TypedefType { return oldObj.Max10TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Max10TypedefType { + return oldObj.Max10TypedefField + }) + errs = append(errs, fn(fldPath.Child("max10TypedefField"), obj.Max10TypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxlength/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxlength/zz_generated.validations.go index 3ae14972d82..4af518a5361 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxlength/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxlength/zz_generated.validations.go @@ -38,180 +38,336 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Max0Type validates an instance of Max0Type according // to declarative validation rules in the API schema. -func Validate_Max0Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Max0Type) (errs field.ErrorList) { - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0)...) +func Validate_Max0Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Max0Type) (errs field.ErrorList) { + + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Max10Type validates an instance of Max10Type according // to declarative validation rules in the API schema. -func Validate_Max10Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Max10Type) (errs field.ErrorList) { - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10)...) +func Validate_Max10Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Max10Type) (errs field.ErrorList) { + + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Max0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0Field + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0Field"), &obj.Max0Field, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.Max0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.Max0Field + }) + errs = append(errs, fn(fldPath.Child("max0Field"), &obj.Max0Field, oldVal, oldObj != nil)...) + } - // field Struct.Max0PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0PtrField"), obj.Max0PtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Max0PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Max0PtrField + }) + errs = append(errs, fn(fldPath.Child("max0PtrField"), obj.Max0PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10Field + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10Field"), &obj.Max10Field, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.Max10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.Max10Field + }) + errs = append(errs, fn(fldPath.Child("max10Field"), &obj.Max10Field, oldVal, oldObj != nil)...) + } - // field Struct.Max10PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10PtrField"), obj.Max10PtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Max10PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Max10PtrField + }) + errs = append(errs, fn(fldPath.Child("max10PtrField"), obj.Max10PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max0UnvalidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0UnvalidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0UnvalidatedTypedefField"), &obj.Max0UnvalidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return &oldObj.Max0UnvalidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return &oldObj.Max0UnvalidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max0UnvalidatedTypedefField"), &obj.Max0UnvalidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max0UnvalidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0UnvalidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max0UnvalidatedTypedefPtrField"), obj.Max0UnvalidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return oldObj.Max0UnvalidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return oldObj.Max0UnvalidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max0UnvalidatedTypedefPtrField"), obj.Max0UnvalidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max10UnvalidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10UnvalidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10UnvalidatedTypedefField"), &obj.Max10UnvalidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return &oldObj.Max10UnvalidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return &oldObj.Max10UnvalidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max10UnvalidatedTypedefField"), &obj.Max10UnvalidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max10UnvalidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10UnvalidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MaxLength(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("max10UnvalidatedTypedefPtrField"), obj.Max10UnvalidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return oldObj.Max10UnvalidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return oldObj.Max10UnvalidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max10UnvalidatedTypedefPtrField"), obj.Max10UnvalidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max0ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max0Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *Max0Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max0Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max0ValidatedTypedefField"), &obj.Max0ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *Max0Type { return &oldObj.Max0ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max0Type { + return &oldObj.Max0ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max0ValidatedTypedefField"), &obj.Max0ValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max0ValidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max0Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0ValidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Max0Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max0Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max0ValidatedTypedefPtrField"), obj.Max0ValidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *Max0Type { return oldObj.Max0ValidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max0Type { + return oldObj.Max0ValidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max0ValidatedTypedefPtrField"), obj.Max0ValidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Max10ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *Max10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max10ValidatedTypedefField"), &obj.Max10ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *Max10Type { return &oldObj.Max10ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max10Type { + return &oldObj.Max10ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("max10ValidatedTypedefField"), &obj.Max10ValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Max10ValidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Max10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10ValidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Max10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Max10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("max10ValidatedTypedefPtrField"), obj.Max10ValidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *Max10Type { return oldObj.Max10ValidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Max10Type { + return oldObj.Max10ValidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("max10ValidatedTypedefPtrField"), obj.Max10ValidatedTypedefPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxproperties/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxproperties/zz_generated.validations.go index 81076ca8108..effcacce019 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxproperties/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/maxproperties/zz_generated.validations.go @@ -39,27 +39,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Max0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0Field + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -71,14 +85,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max0Field"), obj.Max0Field, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.Max0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.Max0Field + }) + errs = append(errs, fn(fldPath.Child("max0Field"), obj.Max0Field, oldVal, oldObj != nil)...) + } - // field Struct.Max10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10Field + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -90,14 +114,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max10Field"), obj.Max10Field, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.Max10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.Max10Field + }) + errs = append(errs, fn(fldPath.Child("max10Field"), obj.Max10Field, oldVal, oldObj != nil)...) + } - // field Struct.Max0TypedefKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[StringKey]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max0TypedefKeyField + fn := func( + fldPath *field.Path, + obj, oldObj map[StringKey]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -109,14 +143,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max0TypedefKeyField"), obj.Max0TypedefKeyField, safe.Field(oldObj, func(oldObj *Struct) map[StringKey]string { return oldObj.Max0TypedefKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[StringKey]string { + return oldObj.Max0TypedefKeyField + }) + errs = append(errs, fn(fldPath.Child("max0TypedefKeyField"), obj.Max0TypedefKeyField, oldVal, oldObj != nil)...) + } - // field Struct.Max10TypedefKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[StringKey]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Max10TypedefKeyField + fn := func( + fldPath *field.Path, + obj, oldObj map[StringKey]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -128,7 +172,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("max10TypedefKeyField"), obj.Max10TypedefKeyField, safe.Field(oldObj, func(oldObj *Struct) map[StringKey]string { return oldObj.Max10TypedefKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[StringKey]string { + return oldObj.Max10TypedefKeyField + }) + errs = append(errs, fn(fldPath.Child("max10TypedefKeyField"), obj.Max10TypedefKeyField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minimum/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minimum/zz_generated.validations.go index 30f89bbe4a6..7f7e9539af2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minimum/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minimum/zz_generated.validations.go @@ -38,172 +38,327 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_IntType validates an instance of IntType according // to declarative validation rules in the API schema. -func Validate_IntType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntType) (errs field.ErrorList) { - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) +func Validate_IntType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *IntType) (errs field.ErrorList) { + + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Int16Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int16, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Int16Field + fn := func( + fldPath *field.Path, + obj, oldObj *int16, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("int16Field"), &obj.Int16Field, safe.Field(oldObj, func(oldObj *Struct) *int16 { return &oldObj.Int16Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int16 { + return &oldObj.Int16Field + }) + errs = append(errs, fn(fldPath.Child("int16Field"), &obj.Int16Field, oldVal, oldObj != nil)...) + } - // field Struct.Int32Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Int32Field + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("int32Field"), &obj.Int32Field, safe.Field(oldObj, func(oldObj *Struct) *int32 { return &oldObj.Int32Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int32 { + return &oldObj.Int32Field + }) + errs = append(errs, fn(fldPath.Child("int32Field"), &obj.Int32Field, oldVal, oldObj != nil)...) + } - // field Struct.Int64Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Int64Field + fn := func( + fldPath *field.Path, + obj, oldObj *int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("int64Field"), &obj.Int64Field, safe.Field(oldObj, func(oldObj *Struct) *int64 { return &oldObj.Int64Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int64 { + return &oldObj.Int64Field + }) + errs = append(errs, fn(fldPath.Child("int64Field"), &obj.Int64Field, oldVal, oldObj != nil)...) + } - // field Struct.UintField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UintField + fn := func( + fldPath *field.Path, + obj, oldObj *uint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uintField"), &obj.UintField, safe.Field(oldObj, func(oldObj *Struct) *uint { return &oldObj.UintField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint { + return &oldObj.UintField + }) + errs = append(errs, fn(fldPath.Child("uintField"), &obj.UintField, oldVal, oldObj != nil)...) + } - // field Struct.UintPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UintPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *uint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uintPtrField"), obj.UintPtrField, safe.Field(oldObj, func(oldObj *Struct) *uint { return oldObj.UintPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint { + return oldObj.UintPtrField + }) + errs = append(errs, fn(fldPath.Child("uintPtrField"), obj.UintPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Uint16Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint16, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Uint16Field + fn := func( + fldPath *field.Path, + obj, oldObj *uint16, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uint16Field"), &obj.Uint16Field, safe.Field(oldObj, func(oldObj *Struct) *uint16 { return &oldObj.Uint16Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint16 { + return &oldObj.Uint16Field + }) + errs = append(errs, fn(fldPath.Child("uint16Field"), &obj.Uint16Field, oldVal, oldObj != nil)...) + } - // field Struct.Uint32Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Uint32Field + fn := func( + fldPath *field.Path, + obj, oldObj *uint32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uint32Field"), &obj.Uint32Field, safe.Field(oldObj, func(oldObj *Struct) *uint32 { return &oldObj.Uint32Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint32 { + return &oldObj.Uint32Field + }) + errs = append(errs, fn(fldPath.Child("uint32Field"), &obj.Uint32Field, oldVal, oldObj != nil)...) + } - // field Struct.Uint64Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Uint64Field + fn := func( + fldPath *field.Path, + obj, oldObj *uint64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.Minimum(ctx, op, fldPath, obj, oldObj, 1)...) + if e := validate.Minimum(ctx, op, fldPath, obj, oldObj, 1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("uint64Field"), &obj.Uint64Field, safe.Field(oldObj, func(oldObj *Struct) *uint64 { return &oldObj.Uint64Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *uint64 { + return &oldObj.Uint64Field + }) + errs = append(errs, fn(fldPath.Child("uint64Field"), &obj.Uint64Field, oldVal, oldObj != nil)...) + } - // field Struct.TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefField"), &obj.TypedefField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return &oldObj.TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return &oldObj.TypedefField + }) + errs = append(errs, fn(fldPath.Child("typedefField"), &obj.TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.TypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.TypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefPtrField"), obj.TypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return oldObj.TypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return oldObj.TypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("typedefPtrField"), obj.TypedefPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_primitive/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_primitive/zz_generated.validations.go index bfe3ce23a4e..936c8efef32 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_primitive/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_primitive/zz_generated.validations.go @@ -39,68 +39,126 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Min0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min0Field + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min0Field"), obj.Min0Field, safe.Field(oldObj, func(oldObj *Struct) []int { return oldObj.Min0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []int { + return oldObj.Min0Field + }) + errs = append(errs, fn(fldPath.Child("min0Field"), obj.Min0Field, oldVal, oldObj != nil)...) + } - // field Struct.Min10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10Field + fn := func( + fldPath *field.Path, + obj, oldObj []int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10Field"), obj.Min10Field, safe.Field(oldObj, func(oldObj *Struct) []int { return oldObj.Min10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []int { + return oldObj.Min10Field + }) + errs = append(errs, fn(fldPath.Child("min10Field"), obj.Min10Field, oldVal, oldObj != nil)...) + } - // field Struct.Min0TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min0TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min0TypedefField"), obj.Min0TypedefField, safe.Field(oldObj, func(oldObj *Struct) []IntType { return oldObj.Min0TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []IntType { + return oldObj.Min0TypedefField + }) + errs = append(errs, fn(fldPath.Child("min0TypedefField"), obj.Min0TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Min10TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10TypedefField"), obj.Min10TypedefField, safe.Field(oldObj, func(oldObj *Struct) []IntType { return oldObj.Min10TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []IntType { + return oldObj.Min10TypedefField + }) + errs = append(errs, fn(fldPath.Child("min10TypedefField"), obj.Min10TypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_struct/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_struct/zz_generated.validations.go index 8e1c61b0d1b..0e7aae045ab 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_struct/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/slice_of_struct/zz_generated.validations.go @@ -39,68 +39,126 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Min0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min0Field + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min0Field"), obj.Min0Field, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.Min0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.Min0Field + }) + errs = append(errs, fn(fldPath.Child("min0Field"), obj.Min0Field, oldVal, oldObj != nil)...) + } - // field Struct.Min10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10Field + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10Field"), obj.Min10Field, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.Min10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.Min10Field + }) + errs = append(errs, fn(fldPath.Child("min10Field"), obj.Min10Field, oldVal, oldObj != nil)...) + } - // field Struct.Min0TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min0TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min0TypedefField"), obj.Min0TypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.Min0TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.Min0TypedefField + }) + errs = append(errs, fn(fldPath.Child("min0TypedefField"), obj.Min0TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Min10TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherTypedefStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherTypedefStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 10)...) + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10TypedefField"), obj.Min10TypedefField, safe.Field(oldObj, func(oldObj *Struct) []OtherTypedefStruct { return oldObj.Min10TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherTypedefStruct { + return oldObj.Min10TypedefField + }) + errs = append(errs, fn(fldPath.Child("min10TypedefField"), obj.Min10TypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/typedef_to_slice/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/typedef_to_slice/zz_generated.validations.go index ef980137c79..cb10223c314 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/typedef_to_slice/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minitems/typedef_to_slice/zz_generated.validations.go @@ -39,101 +39,171 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Min0Type validates an instance of Min0Type according // to declarative validation rules in the API schema. -func Validate_Min0Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Min0Type) (errs field.ErrorList) { - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 0)...) +func Validate_Min0Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Min0Type) (errs field.ErrorList) { + + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Min0TypedefType validates an instance of Min0TypedefType according // to declarative validation rules in the API schema. -func Validate_Min0TypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Min0TypedefType) (errs field.ErrorList) { - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 0)...) +func Validate_Min0TypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Min0TypedefType) (errs field.ErrorList) { + + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Min10Type validates an instance of Min10Type according // to declarative validation rules in the API schema. -func Validate_Min10Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Min10Type) (errs field.ErrorList) { - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 10)...) +func Validate_Min10Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Min10Type) (errs field.ErrorList) { + + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Min10TypedefType validates an instance of Min10TypedefType according // to declarative validation rules in the API schema. -func Validate_Min10TypedefType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj Min10TypedefType) (errs field.ErrorList) { - errs = append(errs, validate.MinItems(ctx, op, fldPath, obj, oldObj, 10)...) +func Validate_Min10TypedefType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj Min10TypedefType) (errs field.ErrorList) { + + if e := validate.MinItems(ctx, op, fldPath, obj, oldObj, 10); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation // field Struct.UnvalidatedField has no validation - // field Struct.Min0Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Min0Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min0Field + fn := func( + fldPath *field.Path, + obj, oldObj Min0Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Min0Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min0Field"), obj.Min0Field, safe.Field(oldObj, func(oldObj *Struct) Min0Type { return oldObj.Min0Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Min0Type { + return oldObj.Min0Field + }) + errs = append(errs, fn(fldPath.Child("min0Field"), obj.Min0Field, oldVal, oldObj != nil)...) + } - // field Struct.Min10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Min10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10Field + fn := func( + fldPath *field.Path, + obj, oldObj Min10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Min10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min10Field"), obj.Min10Field, safe.Field(oldObj, func(oldObj *Struct) Min10Type { return oldObj.Min10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Min10Type { + return oldObj.Min10Field + }) + errs = append(errs, fn(fldPath.Child("min10Field"), obj.Min10Field, oldVal, oldObj != nil)...) + } - // field Struct.Min0TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Min0TypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min0TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj Min0TypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Min0TypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min0TypedefField"), obj.Min0TypedefField, safe.Field(oldObj, func(oldObj *Struct) Min0TypedefType { return oldObj.Min0TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Min0TypedefType { + return oldObj.Min0TypedefField + }) + errs = append(errs, fn(fldPath.Child("min0TypedefField"), obj.Min0TypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Min10TypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj Min10TypedefType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10TypedefField + fn := func( + fldPath *field.Path, + obj, oldObj Min10TypedefType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Min10TypedefType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min10TypedefField"), obj.Min10TypedefField, safe.Field(oldObj, func(oldObj *Struct) Min10TypedefType { return oldObj.Min10TypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) Min10TypedefType { + return oldObj.Min10TypedefField + }) + errs = append(errs, fn(fldPath.Child("min10TypedefField"), obj.Min10TypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minlength/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minlength/zz_generated.validations.go index 45b2ffe61d7..7c6c1804ebc 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minlength/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/minlength/zz_generated.validations.go @@ -38,43 +38,67 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Min10Type validates an instance of Min10Type according // to declarative validation rules in the API schema. -func Validate_Min10Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Min10Type) (errs field.ErrorList) { - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) +func Validate_Min10Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Min10Type) (errs field.ErrorList) { + + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Min2Type validates an instance of Min2Type according // to declarative validation rules in the API schema. -func Validate_Min2Type(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Min2Type) (errs field.ErrorList) { - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha()...) +func Validate_Min2Type( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Min2Type) (errs field.ErrorList) { + + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Min0PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min0PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -85,14 +109,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("min0PtrField"), obj.Min0PtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Min0PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Min0PtrField + }) + errs = append(errs, fn(fldPath.Child("min0PtrField"), obj.Min0PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Min2Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2Field + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -102,16 +136,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min2Field"), &obj.Min2Field, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.Min2Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.Min2Field + }) + errs = append(errs, fn(fldPath.Child("min2Field"), &obj.Min2Field, oldVal, oldObj != nil)...) + } - // field Struct.Min2PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -121,16 +167,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min2PtrField"), obj.Min2PtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Min2PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Min2PtrField + }) + errs = append(errs, fn(fldPath.Child("min2PtrField"), obj.Min2PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Min10Field - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10Field + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -140,16 +198,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10Field"), &obj.Min10Field, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.Min10Field }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.Min10Field + }) + errs = append(errs, fn(fldPath.Child("min10Field"), &obj.Min10Field, oldVal, oldObj != nil)...) + } - // field Struct.Min10PtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10PtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -159,16 +229,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10PtrField"), obj.Min10PtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Min10PtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Min10PtrField + }) + errs = append(errs, fn(fldPath.Child("min10PtrField"), obj.Min10PtrField, oldVal, oldObj != nil)...) + } - // field Struct.Min2UnvalidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2UnvalidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -178,16 +260,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min2UnvalidatedTypedefField"), &obj.Min2UnvalidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return &oldObj.Min2UnvalidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return &oldObj.Min2UnvalidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("min2UnvalidatedTypedefField"), &obj.Min2UnvalidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Min2UnvalidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2UnvalidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -197,16 +291,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min2UnvalidatedTypedefPtrField"), obj.Min2UnvalidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return oldObj.Min2UnvalidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return oldObj.Min2UnvalidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("min2UnvalidatedTypedefPtrField"), obj.Min2UnvalidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Min10UnvalidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10UnvalidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -216,16 +322,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10UnvalidatedTypedefField"), &obj.Min10UnvalidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return &oldObj.Min10UnvalidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return &oldObj.Min10UnvalidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("min10UnvalidatedTypedefField"), &obj.Min10UnvalidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Min10UnvalidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnvalidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10UnvalidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *UnvalidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -235,16 +353,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 10).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min10UnvalidatedTypedefPtrField"), obj.Min10UnvalidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *UnvalidatedStringType { return oldObj.Min10UnvalidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnvalidatedStringType { + return oldObj.Min10UnvalidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("min10UnvalidatedTypedefPtrField"), obj.Min10UnvalidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Min2ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Min2Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *Min2Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -257,14 +387,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field // call the type's validation function errs = append(errs, Validate_Min2Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min2ValidatedTypedefField"), &obj.Min2ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *Min2Type { return &oldObj.Min2ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Min2Type { + return &oldObj.Min2ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("min2ValidatedTypedefField"), &obj.Min2ValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Min2ValidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Min2Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2ValidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Min2Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -277,14 +417,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field // call the type's validation function errs = append(errs, Validate_Min2Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min2ValidatedTypedefPtrField"), obj.Min2ValidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *Min2Type { return oldObj.Min2ValidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Min2Type { + return oldObj.Min2ValidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("min2ValidatedTypedefPtrField"), obj.Min2ValidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Min10ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Min10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *Min10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -297,14 +447,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field // call the type's validation function errs = append(errs, Validate_Min10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min10ValidatedTypedefField"), &obj.Min10ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *Min10Type { return &oldObj.Min10ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Min10Type { + return &oldObj.Min10ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("min10ValidatedTypedefField"), &obj.Min10ValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.Min10ValidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Min10Type, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min10ValidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *Min10Type, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -317,14 +477,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field // call the type's validation function errs = append(errs, Validate_Min10Type(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("min10ValidatedTypedefPtrField"), obj.Min10ValidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *Min10Type { return oldObj.Min10ValidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Min10Type { + return oldObj.Min10ValidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("min10ValidatedTypedefPtrField"), obj.Min10ValidatedTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.Min2UnvalidatedStringAliasField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2UnvalidatedStringAliasField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -334,16 +504,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min2UnvalidatedStringAliasField"), &obj.Min2UnvalidatedStringAliasField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.Min2UnvalidatedStringAliasField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.Min2UnvalidatedStringAliasField + }) + errs = append(errs, fn(fldPath.Child("min2UnvalidatedStringAliasField"), &obj.Min2UnvalidatedStringAliasField, oldVal, oldObj != nil)...) + } - // field Struct.Min2UnvalidatedStringAliasPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Min2UnvalidatedStringAliasPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -353,9 +535,17 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha()...) + if e := validate.MinLength(ctx, op, fldPath, obj, oldObj, 2).MarkAlpha(); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("min2UnvalidatedStringAliasPtrField"), obj.Min2UnvalidatedStringAliasPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.Min2UnvalidatedStringAliasPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.Min2UnvalidatedStringAliasPtrField + }) + errs = append(errs, fn(fldPath.Child("min2UnvalidatedStringAliasPtrField"), obj.Min2UnvalidatedStringAliasPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/mode/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/mode/zz_generated.validations.go index 9d89bfeb7c9..22ec68ac3e0 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/mode/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/mode/zz_generated.validations.go @@ -38,87 +38,148 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type ChainedValidation - scheme.AddValidationFunc((*ChainedValidation)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ChainedValidation(ctx, op, nil /* fldPath */, obj.(*ChainedValidation), safe.Cast[*ChainedValidation](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ChainedValidation)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ChainedValidation( + ctx, op, nil, /* fldPath */ + obj.(*ChainedValidation), + safe.Cast[*ChainedValidation](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Collections - scheme.AddValidationFunc((*Collections)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Collections(ctx, op, nil /* fldPath */, obj.(*Collections), safe.Cast[*Collections](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Collections)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Collections( + ctx, op, nil, /* fldPath */ + obj.(*Collections), + safe.Cast[*Collections](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type ImplicitForbidden - scheme.AddValidationFunc((*ImplicitForbidden)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_ImplicitForbidden(ctx, op, nil /* fldPath */, obj.(*ImplicitForbidden), safe.Cast[*ImplicitForbidden](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*ImplicitForbidden)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_ImplicitForbidden( + ctx, op, nil, /* fldPath */ + obj.(*ImplicitForbidden), + safe.Cast[*ImplicitForbidden](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type MultipleDiscriminators - scheme.AddValidationFunc((*MultipleDiscriminators)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_MultipleDiscriminators(ctx, op, nil /* fldPath */, obj.(*MultipleDiscriminators), safe.Cast[*MultipleDiscriminators](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*MultipleDiscriminators)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_MultipleDiscriminators( + ctx, op, nil, /* fldPath */ + obj.(*MultipleDiscriminators), + safe.Cast[*MultipleDiscriminators](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type NonStringDiscriminator - scheme.AddValidationFunc((*NonStringDiscriminator)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_NonStringDiscriminator(ctx, op, nil /* fldPath */, obj.(*NonStringDiscriminator), safe.Cast[*NonStringDiscriminator](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*NonStringDiscriminator)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_NonStringDiscriminator( + ctx, op, nil, /* fldPath */ + obj.(*NonStringDiscriminator), + safe.Cast[*NonStringDiscriminator](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type SharedField - scheme.AddValidationFunc((*SharedField)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_SharedField(ctx, op, nil /* fldPath */, obj.(*SharedField), safe.Cast[*SharedField](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*SharedField)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_SharedField( + ctx, op, nil, /* fldPath */ + obj.(*SharedField), + safe.Cast[*SharedField](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type StrictUnion - scheme.AddValidationFunc((*StrictUnion)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_StrictUnion(ctx, op, nil /* fldPath */, obj.(*StrictUnion), safe.Cast[*StrictUnion](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*StrictUnion)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_StrictUnion( + ctx, op, nil, /* fldPath */ + obj.(*StrictUnion), + safe.Cast[*StrictUnion](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_ChainedValidation validates an instance of ChainedValidation according // to declarative validation rules in the API schema. -func Validate_ChainedValidation(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ChainedValidation) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *ChainedValidation) *string { return obj.FieldA }, func(obj *ChainedValidation) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_ChainedValidation( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ChainedValidation) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *ChainedValidation) *string { return obj.FieldA }, + func(obj *ChainedValidation) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } + errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 5)...) return errs - } - errs = append(errs, validate.MaxLength(ctx, op, fldPath, obj, oldObj, 5)...) - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field ChainedValidation.TypeMeta has no validation // field ChainedValidation.D1 has no validation @@ -128,43 +189,64 @@ func Validate_ChainedValidation(ctx context.Context, op operation.Operation, fld // Validate_Collections validates an instance of Collections according // to declarative validation rules in the API schema. -func Validate_Collections(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Collections) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "listField", func(obj *Collections) []string { return obj.ListField }, func(obj *Collections) string { return obj.D1 }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenSlice(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[[]string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalSlice(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { +func Validate_Collections( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Collections) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "listField", + func(obj *Collections) []string { return obj.ListField }, + func(obj *Collections) string { return obj.D1 }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenSlice(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[[]string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalSlice(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "mapField", func(obj *Collections) map[string]string { return obj.MapField }, func(obj *Collections) string { return obj.D1 }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenMap(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[map[string]string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalMap(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "mapField", + func(obj *Collections) map[string]string { return obj.MapField }, + func(obj *Collections) string { return obj.D1 }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenMap(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[map[string]string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalMap(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field Collections.TypeMeta has no validation // field Collections.D1 has no validation @@ -175,25 +257,37 @@ func Validate_Collections(ctx context.Context, op operation.Operation, fldPath * // Validate_ImplicitForbidden validates an instance of ImplicitForbidden according // to declarative validation rules in the API schema. -func Validate_ImplicitForbidden(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ImplicitForbidden) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *ImplicitForbidden) *string { return obj.FieldA }, func(obj *ImplicitForbidden) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { +func Validate_ImplicitForbidden( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ImplicitForbidden) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *ImplicitForbidden) *string { return obj.FieldA }, + func(obj *ImplicitForbidden) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field ImplicitForbidden.TypeMeta has no validation // field ImplicitForbidden.D1 has no validation @@ -203,45 +297,66 @@ func Validate_ImplicitForbidden(ctx context.Context, op operation.Operation, fld // Validate_MultipleDiscriminators validates an instance of MultipleDiscriminators according // to declarative validation rules in the API schema. -func Validate_MultipleDiscriminators(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MultipleDiscriminators) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *MultipleDiscriminators) *string { return obj.FieldA }, func(obj *MultipleDiscriminators) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_MultipleDiscriminators( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *MultipleDiscriminators) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *MultipleDiscriminators) *string { return obj.FieldA }, + func(obj *MultipleDiscriminators) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", func(obj *MultipleDiscriminators) *string { return obj.FieldB }, func(obj *MultipleDiscriminators) string { return obj.D2 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", + func(obj *MultipleDiscriminators) *string { return obj.FieldB }, + func(obj *MultipleDiscriminators) string { return obj.D2 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field MultipleDiscriminators.TypeMeta has no validation // field MultipleDiscriminators.D1 has no validation @@ -253,26 +368,38 @@ func Validate_MultipleDiscriminators(ctx context.Context, op operation.Operation // Validate_NonStringDiscriminator validates an instance of NonStringDiscriminator according // to declarative validation rules in the API schema. -func Validate_NonStringDiscriminator(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *NonStringDiscriminator) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *NonStringDiscriminator) *string { return obj.FieldA }, func(obj *NonStringDiscriminator) bool { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, bool]{ - { - Value: true, Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_NonStringDiscriminator( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *NonStringDiscriminator) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *NonStringDiscriminator) *string { return obj.FieldA }, + func(obj *NonStringDiscriminator) bool { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, bool]{ + + { + Value: true, + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field NonStringDiscriminator.TypeMeta has no validation // field NonStringDiscriminator.D1 has no validation @@ -282,37 +409,52 @@ func Validate_NonStringDiscriminator(ctx context.Context, op operation.Operation // Validate_SharedField validates an instance of SharedField according // to declarative validation rules in the API schema. -func Validate_SharedField(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SharedField) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *SharedField) *string { return obj.FieldA }, func(obj *SharedField) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { +func Validate_SharedField( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *SharedField) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *SharedField) *string { return obj.FieldA }, + func(obj *SharedField) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { + }, + }, + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field SharedField.TypeMeta has no validation // field SharedField.D1 has no validation @@ -322,45 +464,66 @@ func Validate_SharedField(ctx context.Context, op operation.Operation, fldPath * // Validate_StrictUnion validates an instance of StrictUnion according // to declarative validation rules in the API schema. -func Validate_StrictUnion(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StrictUnion) (errs field.ErrorList) { - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *StrictUnion) *string { return obj.FieldA }, func(obj *StrictUnion) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { +func Validate_StrictUnion( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StrictUnion) (errs field.ErrorList) { + + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *StrictUnion) *string { return obj.FieldA }, + func(obj *StrictUnion) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) - errs = append(errs, validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", func(obj *StrictUnion) *string { return obj.FieldB }, func(obj *StrictUnion) string { return obj.D1 }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - earlyReturn := false - if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", + func(obj *StrictUnion) *string { return obj.FieldB }, + func(obj *StrictUnion) string { return obj.D1 }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) + return errs + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.RequiredPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return errs + } return errs - } - return errs - }}, - })...) + }, + }, + }); len(e) != 0 { + errs = append(errs, e...) + } // field StrictUnion.TypeMeta has no validation // field StrictUnion.D1 has no validation diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neq/neqchained/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neq/neqchained/zz_generated.validations.go index c220d01acbd..6effaa1b431 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neq/neqchained/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neq/neqchained/zz_generated.validations.go @@ -39,43 +39,71 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *InnerStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructField + fn := func( + fldPath *field.Path, + obj, oldObj *InnerStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - func() { // cohort stringField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *InnerStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-subfield") - })...) + func() { // cohort = "stringField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *InnerStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-subfield") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("structField"), &obj.StructField, safe.Field(oldObj, func(oldObj *Struct) *InnerStruct { return &oldObj.StructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *InnerStruct { + return &oldObj.StructField + }) + errs = append(errs, fn(fldPath.Child("structField"), &obj.StructField, oldVal, oldObj != nil)...) + } - // field Struct.StructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *InnerStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *InnerStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -85,90 +113,166 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - func() { // cohort stringField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *InnerStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-subfield-ptr") - })...) + func() { // cohort = "stringField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *InnerStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-subfield-ptr") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("structPtrField"), obj.StructPtrField, safe.Field(oldObj, func(oldObj *Struct) *InnerStruct { return oldObj.StructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *InnerStruct { + return oldObj.StructPtrField + }) + errs = append(errs, fn(fldPath.Child("structPtrField"), obj.StructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.StringSliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringSliceField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-slice") - })...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-slice") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringSliceField"), obj.StringSliceField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.StringSliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.StringSliceField + }) + errs = append(errs, fn(fldPath.Child("stringSliceField"), obj.StringSliceField, oldVal, oldObj != nil)...) + } - // field Struct.StringMapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringMapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-map-val") - })...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-map-val") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringMapField"), obj.StringMapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.StringMapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.StringMapField + }) + errs = append(errs, fn(fldPath.Child("stringMapField"), obj.StringMapField, oldVal, oldObj != nil)...) + } - // field Struct.StringMapKeyField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringMapKeyField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-key") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-key") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringMapKeyField"), obj.StringMapKeyField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.StringMapKeyField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.StringMapKeyField + }) + errs = append(errs, fn(fldPath.Child("stringMapKeyField"), obj.StringMapKeyField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedSliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj ValidatedStringSlice, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedSliceField + fn := func( + fldPath *field.Path, + obj, oldObj ValidatedStringSlice, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatedStringSlice(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedSliceField"), obj.ValidatedSliceField, safe.Field(oldObj, func(oldObj *Struct) ValidatedStringSlice { return oldObj.ValidatedSliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) ValidatedStringSlice { + return oldObj.ValidatedSliceField + }) + errs = append(errs, fn(fldPath.Child("validatedSliceField"), obj.ValidatedSliceField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ValidatedInnerStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedStructField + fn := func( + fldPath *field.Path, + obj, oldObj *ValidatedInnerStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatedInnerStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedStructField"), &obj.ValidatedStructField, safe.Field(oldObj, func(oldObj *Struct) *ValidatedInnerStruct { return &oldObj.ValidatedStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ValidatedInnerStruct { + return &oldObj.ValidatedStructField + }) + errs = append(errs, fn(fldPath.Child("validatedStructField"), &obj.ValidatedStructField, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatedInnerStruct validates an instance of ValidatedInnerStruct according // to declarative validation rules in the API schema. -func Validate_ValidatedInnerStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedInnerStruct) (errs field.ErrorList) { - func() { // cohort stringField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *ValidatedInnerStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef-struct") - })...) +func Validate_ValidatedInnerStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ValidatedInnerStruct) (errs field.ErrorList) { + + func() { // cohort = "stringField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *ValidatedInnerStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef-struct") + }); len(e) != 0 { + errs = append(errs, e...) + } }() // field ValidatedInnerStruct.StringField has no validation @@ -177,10 +281,16 @@ func Validate_ValidatedInnerStruct(ctx context.Context, op operation.Operation, // Validate_ValidatedStringSlice validates an instance of ValidatedStringSlice according // to declarative validation rules in the API schema. -func Validate_ValidatedStringSlice(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj ValidatedStringSlice) (errs field.ErrorList) { - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef") - })...) +func Validate_ValidatedStringSlice( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj ValidatedStringSlice) (errs field.ErrorList) { + + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef") + }); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqbool/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqbool/zz_generated.validations.go index 3eb857925bf..2d1994054ee 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqbool/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqbool/zz_generated.validations.go @@ -38,64 +38,113 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.NeqTrueField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.NeqTrueField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, true)...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, true); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("neqTrueField"), &obj.NeqTrueField, safe.Field(oldObj, func(oldObj *Struct) *bool { return &oldObj.NeqTrueField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return &oldObj.NeqTrueField + }) + errs = append(errs, fn(fldPath.Child("neqTrueField"), &obj.NeqTrueField, oldVal, oldObj != nil)...) + } - // field Struct.NeqFalsePtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.NeqFalsePtrField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, false)...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, false); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("neqFalsePtrField"), obj.NeqFalsePtrField, safe.Field(oldObj, func(oldObj *Struct) *bool { return oldObj.NeqFalsePtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return oldObj.NeqFalsePtrField + }) + errs = append(errs, fn(fldPath.Child("neqFalsePtrField"), obj.NeqFalsePtrField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ValidatedBoolType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *ValidatedBoolType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatedBoolType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedTypedefField"), &obj.ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *ValidatedBoolType { return &oldObj.ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ValidatedBoolType { + return &oldObj.ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("validatedTypedefField"), &obj.ValidatedTypedefField, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatedBoolType validates an instance of ValidatedBoolType according // to declarative validation rules in the API schema. -func Validate_ValidatedBoolType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedBoolType) (errs field.ErrorList) { - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, true)...) +func Validate_ValidatedBoolType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ValidatedBoolType) (errs field.ErrorList) { + + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, true); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqint/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqint/zz_generated.validations.go index 6bbd8079a54..acc9bf00396 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqint/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqint/zz_generated.validations.go @@ -38,76 +38,137 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, 0)...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, 0); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, -1)...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, -1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, 42)...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, 42); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intTypedefField"), &obj.IntTypedefField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return &oldObj.IntTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return &oldObj.IntTypedefField + }) + errs = append(errs, fn(fldPath.Child("intTypedefField"), &obj.IntTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ValidatedIntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *ValidatedIntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatedIntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedTypedefField"), &obj.ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *ValidatedIntType { return &oldObj.ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ValidatedIntType { + return &oldObj.ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("validatedTypedefField"), &obj.ValidatedTypedefField, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatedIntType validates an instance of ValidatedIntType according // to declarative validation rules in the API schema. -func Validate_ValidatedIntType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedIntType) (errs field.ErrorList) { - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, 100)...) +func Validate_ValidatedIntType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ValidatedIntType) (errs field.ErrorList) { + + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, 100); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqstring/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqstring/zz_generated.validations.go index 1f6f9c40990..01f451a9c3e 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqstring/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/neq/neqstring/zz_generated.validations.go @@ -38,100 +38,183 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-string")...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-string"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-pointer")...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-pointer"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringPtrField"), obj.StringPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.StringPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.StringPtrField + }) + errs = append(errs, fn(fldPath.Child("stringPtrField"), obj.StringPtrField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef")...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return &oldObj.StringTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return &oldObj.StringTypedefField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef-pointer")...) + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-typedef-pointer"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return oldObj.StringTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return oldObj.StringTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ValidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *ValidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatedStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedTypedefField"), &obj.ValidatedTypedefField, safe.Field(oldObj, func(oldObj *Struct) *ValidatedStringType { return &oldObj.ValidatedTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ValidatedStringType { + return &oldObj.ValidatedTypedefField + }) + errs = append(errs, fn(fldPath.Child("validatedTypedefField"), &obj.ValidatedTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ValidatedTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ValidatedStringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ValidatedTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *ValidatedStringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ValidatedStringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("validatedTypedefPtrField"), obj.ValidatedTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *ValidatedStringType { return oldObj.ValidatedTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ValidatedStringType { + return oldObj.ValidatedTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("validatedTypedefPtrField"), obj.ValidatedTypedefPtrField, oldVal, oldObj != nil)...) + } return errs } // Validate_ValidatedStringType validates an instance of ValidatedStringType according // to declarative validation rules in the API schema. -func Validate_ValidatedStringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ValidatedStringType) (errs field.ErrorList) { - errs = append(errs, validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-on-type")...) +func Validate_ValidatedStringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ValidatedStringType) (errs field.ErrorList) { + + if e := validate.NEQ(ctx, op, fldPath, obj, oldObj, "disallowed-on-type"); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/opaque/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/opaque/zz_generated.validations.go index 932b5fc900a..d1d6c47bfed 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/opaque/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/opaque/zz_generated.validations.go @@ -39,101 +39,177 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type OtherString - scheme.AddValidationFunc((*OtherString)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_OtherString(ctx, op, nil /* fldPath */, obj.(*OtherString), safe.Cast[*OtherString](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*OtherString)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_OtherString( + ctx, op, nil, /* fldPath */ + obj.(*OtherString), + safe.Cast[*OtherString](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type OtherStruct - scheme.AddValidationFunc((*OtherStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_OtherStruct(ctx, op, nil /* fldPath */, obj.(*OtherStruct), safe.Cast[*OtherStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*OtherStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_OtherStruct( + ctx, op, nil, /* fldPath */ + obj.(*OtherStruct), + safe.Cast[*OtherStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type TypedefMapOther - scheme.AddValidationFunc((TypedefMapOther)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_TypedefMapOther(ctx, op, nil /* fldPath */, obj.(TypedefMapOther), safe.Cast[TypedefMapOther](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (TypedefMapOther)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_TypedefMapOther( + ctx, op, nil, /* fldPath */ + obj.(TypedefMapOther), + safe.Cast[TypedefMapOther](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type TypedefSliceOther - scheme.AddValidationFunc((TypedefSliceOther)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_TypedefSliceOther(ctx, op, nil /* fldPath */, obj.(TypedefSliceOther), safe.Cast[TypedefSliceOther](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (TypedefSliceOther)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_TypedefSliceOther( + ctx, op, nil, /* fldPath */ + obj.(TypedefSliceOther), + safe.Cast[TypedefSliceOther](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_OtherString validates an instance of OtherString according // to declarative validation rules in the API schema. -func Validate_OtherString(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherString) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherString")...) +func Validate_OtherString( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherString) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherString"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_OtherStruct validates an instance of OtherStruct according // to declarative validation rules in the API schema. -func Validate_OtherStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct")...) +func Validate_OtherStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherStruct) (errs field.ErrorList) { - // field OtherStruct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field OtherStruct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field OtherStruct.StringField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field OtherStruct.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *OtherStruct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *OtherStruct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StructField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_OtherStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("structField"), &obj.StructField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return &oldObj.StructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return &oldObj.StructField + }) + errs = append(errs, fn(fldPath.Child("structField"), &obj.StructField, oldVal, oldObj != nil)...) + } - // field Struct.StructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -144,30 +220,54 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StructPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StructPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_OtherStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("structPtrField"), obj.StructPtrField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return oldObj.StructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return oldObj.StructPtrField + }) + errs = append(errs, fn(fldPath.Child("structPtrField"), obj.StructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.OpaqueStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.OpaqueStructField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OpaqueStructField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OpaqueStructField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("opaqueStructField"), &obj.OpaqueStructField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return &oldObj.OpaqueStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return &oldObj.OpaqueStructField + }) + errs = append(errs, fn(fldPath.Child("opaqueStructField"), &obj.OpaqueStructField, oldVal, oldObj != nil)...) + } - // field Struct.OpaqueStructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.OpaqueStructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -178,133 +278,264 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OpaqueStructPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OpaqueStructPtrField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("opaqueStructPtrField"), obj.OpaqueStructPtrField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return oldObj.OpaqueStructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return oldObj.OpaqueStructPtrField + }) + errs = append(errs, fn(fldPath.Child("opaqueStructPtrField"), obj.OpaqueStructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.SliceOfStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceOfStructField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfStructField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfStructField vals") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfStructField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfStructField vals") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_OtherStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceOfStructField"), obj.SliceOfStructField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.SliceOfStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.SliceOfStructField + }) + errs = append(errs, fn(fldPath.Child("sliceOfStructField"), obj.SliceOfStructField, oldVal, oldObj != nil)...) + } - // field Struct.SliceOfOpaqueStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceOfOpaqueStructField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfOpaqueStructField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfOpaqueStructField vals") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfOpaqueStructField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceOfOpaqueStructField vals") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceOfOpaqueStructField"), obj.SliceOfOpaqueStructField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.SliceOfOpaqueStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.SliceOfOpaqueStructField + }) + errs = append(errs, fn(fldPath.Child("sliceOfOpaqueStructField"), obj.SliceOfOpaqueStructField, oldVal, oldObj != nil)...) + } - // field Struct.ListMapOfStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListMapOfStructField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfStructField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfStructField vals") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfStructField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfStructField vals") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }, validate.DirectEqual, Validate_OtherStruct)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }, validate.DirectEqual, Validate_OtherStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listMapOfStructField"), obj.ListMapOfStructField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListMapOfStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListMapOfStructField + }) + errs = append(errs, fn(fldPath.Child("listMapOfStructField"), obj.ListMapOfStructField, oldVal, oldObj != nil)...) + } - // field Struct.ListMapOfOpaqueStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListMapOfOpaqueStructField + fn := func( + fldPath *field.Path, + obj, oldObj []OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfOpaqueStructField")...) - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfOpaqueStructField vals") - })...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfOpaqueStructField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListMapOfOpaqueStructField vals") + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a OtherStruct, b OtherStruct) bool { return a.StringField == b.StringField }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listMapOfOpaqueStructField"), obj.ListMapOfOpaqueStructField, safe.Field(oldObj, func(oldObj *Struct) []OtherStruct { return oldObj.ListMapOfOpaqueStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []OtherStruct { + return oldObj.ListMapOfOpaqueStructField + }) + errs = append(errs, fn(fldPath.Child("listMapOfOpaqueStructField"), obj.ListMapOfOpaqueStructField, oldVal, oldObj != nil)...) + } - // field Struct.MapOfStringToStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[OtherString]OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapOfStringToStructField + fn := func( + fldPath *field.Path, + obj, oldObj map[OtherString]OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherString) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToStructField keys") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToStructField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToStructField vals") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherString) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToStructField keys") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToStructField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToStructField vals") + }); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the key type's validation function - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_OtherString)...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, Validate_OtherString); len(e) != 0 { + errs = append(errs, e...) + } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_OtherStruct)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_OtherStruct); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapOfStringToStructField"), obj.MapOfStringToStructField, safe.Field(oldObj, func(oldObj *Struct) map[OtherString]OtherStruct { return oldObj.MapOfStringToStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[OtherString]OtherStruct { + return oldObj.MapOfStringToStructField + }) + errs = append(errs, fn(fldPath.Child("mapOfStringToStructField"), obj.MapOfStringToStructField, oldVal, oldObj != nil)...) + } - // field Struct.MapOfStringToOpaqueStructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[OtherString]OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapOfStringToOpaqueStructField + fn := func( + fldPath *field.Path, + obj, oldObj map[OtherString]OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherString) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToOpaqueStructField keys") - })...) - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToOpaqueStructField")...) - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToOpaqueStructField vals") - })...) + if e := validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherString) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToOpaqueStructField keys") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToOpaqueStructField"); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapOfStringToOpaqueStructField vals") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapOfStringToOpaqueStructField"), obj.MapOfStringToOpaqueStructField, safe.Field(oldObj, func(oldObj *Struct) map[OtherString]OtherStruct { return oldObj.MapOfStringToOpaqueStructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[OtherString]OtherStruct { + return oldObj.MapOfStringToOpaqueStructField + }) + errs = append(errs, fn(fldPath.Child("mapOfStringToOpaqueStructField"), obj.MapOfStringToOpaqueStructField, oldVal, oldObj != nil)...) + } return errs } // Validate_TypedefMapOther validates an instance of TypedefMapOther according // to declarative validation rules in the API schema. -func Validate_TypedefMapOther(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj TypedefMapOther) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type TypedefMapOther")...) +func Validate_TypedefMapOther( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj TypedefMapOther) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type TypedefMapOther"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_TypedefSliceOther validates an instance of TypedefSliceOther according // to declarative validation rules in the API schema. -func Validate_TypedefSliceOther(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj TypedefSliceOther) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type TypedefSliceOther")...) +func Validate_TypedefSliceOther( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj TypedefSliceOther) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "type TypedefSliceOther"); len(e) != 0 { + errs = append(errs, e...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/nonzero_defaults/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/nonzero_defaults/zz_generated.validations.go index 992a631b885..480b8e7080b 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/nonzero_defaults/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/nonzero_defaults/zz_generated.validations.go @@ -38,27 +38,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -71,14 +85,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -91,14 +115,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringPtrField"), obj.StringPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.StringPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.StringPtrField + }) + errs = append(errs, fn(fldPath.Child("stringPtrField"), obj.StringPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -111,14 +145,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -131,14 +175,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.BoolField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BoolField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -151,14 +205,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("boolField"), &obj.BoolField, safe.Field(oldObj, func(oldObj *Struct) *bool { return &oldObj.BoolField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return &oldObj.BoolField + }) + errs = append(errs, fn(fldPath.Child("boolField"), &obj.BoolField, oldVal, oldObj != nil)...) + } - // field Struct.BoolPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BoolPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -171,7 +235,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("boolPtrField"), obj.BoolPtrField, safe.Field(oldObj, func(oldObj *Struct) *bool { return oldObj.BoolPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return oldObj.BoolPtrField + }) + errs = append(errs, fn(fldPath.Child("boolPtrField"), obj.BoolPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zero_defaults/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zero_defaults/zz_generated.validations.go index dbf159a1eb8..205932b5ca3 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zero_defaults/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zero_defaults/zz_generated.validations.go @@ -38,34 +38,56 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -78,21 +100,39 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("stringPtrField"), obj.StringPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.StringPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.StringPtrField + }) + errs = append(errs, fn(fldPath.Child("stringPtrField"), obj.StringPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -105,21 +145,39 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.BoolField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BoolField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // optional value-type fields with zero-value defaults are purely documentation return - }(fldPath.Child("boolField"), &obj.BoolField, safe.Field(oldObj, func(oldObj *Struct) *bool { return &oldObj.BoolField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return &oldObj.BoolField + }) + errs = append(errs, fn(fldPath.Child("boolField"), &obj.BoolField, oldVal, oldObj != nil)...) + } - // field Struct.BoolPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BoolPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -132,7 +190,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("boolPtrField"), obj.BoolPtrField, safe.Field(oldObj, func(oldObj *Struct) *bool { return oldObj.BoolPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return oldObj.BoolPtrField + }) + errs = append(errs, fn(fldPath.Child("boolPtrField"), obj.BoolPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zz_generated.validations.go index 71a430d50c6..553714126f0 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/optional/zz_generated.validations.go @@ -39,67 +39,106 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_IntType validates an instance of IntType according // to declarative validation rules in the API schema. -func Validate_IntType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type IntType")...) +func Validate_IntType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *IntType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type IntType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_MapType validates an instance of MapType according // to declarative validation rules in the API schema. -func Validate_MapType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MapType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType")...) +func Validate_MapType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj MapType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_OtherStruct validates an instance of OtherStruct according // to declarative validation rules in the API schema. -func Validate_OtherStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct")...) +func Validate_OtherStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_SliceType validates an instance of SliceType according // to declarative validation rules in the API schema. -func Validate_SliceType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj SliceType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type SliceType")...) +func Validate_SliceType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj SliceType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type SliceType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_StringType validates an instance of StringType according // to declarative validation rules in the API schema. -func Validate_StringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType")...) +func Validate_StringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -109,16 +148,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -128,16 +179,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringPtrField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringPtrField"), obj.StringPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.StringPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.StringPtrField + }) + errs = append(errs, fn(fldPath.Child("stringPtrField"), obj.StringPtrField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -147,18 +210,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_StringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return &oldObj.StringTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return &oldObj.StringTypedefField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -168,18 +243,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_StringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return oldObj.StringTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return oldObj.StringTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -189,16 +276,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -208,16 +307,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntPtrField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -227,18 +338,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("intTypedefField"), &obj.IntTypedefField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return &oldObj.IntTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return &oldObj.IntTypedefField + }) + errs = append(errs, fn(fldPath.Child("intTypedefField"), &obj.IntTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.IntTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -248,18 +371,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("intTypedefPtrField"), obj.IntTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return oldObj.IntTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return oldObj.IntTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("intTypedefPtrField"), obj.IntTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.OtherStructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.OtherStructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -269,18 +404,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OtherStructPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OtherStructPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_OtherStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("otherStructPtrField"), obj.OtherStructPtrField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return oldObj.OtherStructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return oldObj.OtherStructPtrField + }) + errs = append(errs, fn(fldPath.Child("otherStructPtrField"), obj.OtherStructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.SliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -290,16 +437,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceField"), obj.SliceField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.SliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.SliceField + }) + errs = append(errs, fn(fldPath.Child("sliceField"), obj.SliceField, oldVal, oldObj != nil)...) + } - // field Struct.SliceTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj SliceType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj SliceType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -309,18 +468,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_SliceType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("sliceTypedefField"), obj.SliceTypedefField, safe.Field(oldObj, func(oldObj *Struct) SliceType { return oldObj.SliceTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) SliceType { + return oldObj.SliceTypedefField + }) + errs = append(errs, fn(fldPath.Child("sliceTypedefField"), obj.SliceTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -330,16 +501,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj MapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -349,11 +532,19 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_MapType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) MapType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MapType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/discriminators/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/discriminators/zz_generated.validations.go index d55ca6dd596..99267abce68 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/discriminators/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/discriminators/zz_generated.validations.go @@ -39,59 +39,89 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Discriminator validates an instance of Discriminator according // to declarative validation rules in the API schema. -func Validate_Discriminator(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Discriminator) (errs field.ErrorList) { - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Discriminator) field.ErrorList { - return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *Discriminator) *string { return obj.FieldA }, func(obj *Discriminator) string { return obj.Discriminator }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { +func Validate_Discriminator( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Discriminator) (errs field.ErrorList) { + + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Discriminator) field.ErrorList { + return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *Discriminator) *string { return obj.FieldA }, + func(obj *Discriminator) string { return obj.Discriminator }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) return errs - }}, - }) - })...) - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Discriminator) field.ErrorList { - return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", func(obj *Discriminator) *string { return obj.FieldB }, func(obj *Discriminator) string { return obj.Discriminator }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }) + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Discriminator) field.ErrorList { + return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", + func(obj *Discriminator) *string { return obj.FieldB }, + func(obj *Discriminator) string { return obj.Discriminator }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) return errs - }}, - }) - })...) + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // field Discriminator.Discriminator has no validation // field Discriminator.FieldA has no validation @@ -101,47 +131,70 @@ func Validate_Discriminator(ctx context.Context, op operation.Operation, fldPath // Validate_DiscriminatorDisabled validates an instance of DiscriminatorDisabled according // to declarative validation rules in the API schema. -func Validate_DiscriminatorDisabled(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DiscriminatorDisabled) (errs field.ErrorList) { - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DiscriminatorDisabled) field.ErrorList { - return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", func(obj *DiscriminatorDisabled) *string { return obj.FieldA }, func(obj *DiscriminatorDisabled) string { return obj.Discriminator }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "A", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { +func Validate_DiscriminatorDisabled( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *DiscriminatorDisabled) (errs field.ErrorList) { + + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DiscriminatorDisabled) field.ErrorList { + return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldA", + func(obj *DiscriminatorDisabled) *string { return obj.FieldA }, + func(obj *DiscriminatorDisabled) string { return obj.Discriminator }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) return errs - }}, - }) - })...) - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DiscriminatorDisabled) field.ErrorList { - return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", func(obj *DiscriminatorDisabled) *string { return obj.FieldB }, func(obj *DiscriminatorDisabled) string { return obj.Discriminator }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - errs := field.ErrorList{} - errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) - return errs - }, []validate.DiscriminatedRule[*string, string]{ - { - Value: "B", Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "A", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }) + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureZ", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *DiscriminatorDisabled) field.ErrorList { + return validate.Discriminated(ctx, op, fldPath, obj, oldObj, "fieldB", + func(obj *DiscriminatorDisabled) *string { return obj.FieldB }, + func(obj *DiscriminatorDisabled) string { return obj.Discriminator }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { errs := field.ErrorList{} - earlyReturn := false - if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - earlyReturn = true - } - if earlyReturn { - return errs - } + errs = append(errs, validate.ForbiddenPointer(ctx, op, fldPath, obj, oldObj)...) return errs - }}, - }) - })...) + }, + []validate.DiscriminatedRule[*string, string]{ + + { + Value: "B", + Validation: func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + errs := field.ErrorList{} + earlyReturn := false + if e := validate.OptionalPointer(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + earlyReturn = true + } + if earlyReturn { + return errs + } + return errs + }, + }, + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // field DiscriminatorDisabled.Discriminator has no validation // field DiscriminatorDisabled.FieldA has no validation @@ -151,32 +204,55 @@ func Validate_DiscriminatorDisabled(ctx context.Context, op operation.Operation, // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.DiscriminatorField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Discriminator, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.DiscriminatorField + fn := func( + fldPath *field.Path, + obj, oldObj *Discriminator, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Discriminator(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("discriminatorField"), &obj.DiscriminatorField, safe.Field(oldObj, func(oldObj *Struct) *Discriminator { return &oldObj.DiscriminatorField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Discriminator { + return &oldObj.DiscriminatorField + }) + errs = append(errs, fn(fldPath.Child("discriminatorField"), &obj.DiscriminatorField, oldVal, oldObj != nil)...) + } - // field Struct.DiscriminatorFieldDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *DiscriminatorDisabled, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.DiscriminatorFieldDisabled + fn := func( + fldPath *field.Path, + obj, oldObj *DiscriminatorDisabled, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_DiscriminatorDisabled(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("discriminatorFieldDisabled"), &obj.DiscriminatorFieldDisabled, safe.Field(oldObj, func(oldObj *Struct) *DiscriminatorDisabled { return &oldObj.DiscriminatorFieldDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *DiscriminatorDisabled { + return &oldObj.DiscriminatorFieldDisabled + }) + errs = append(errs, fn(fldPath.Child("discriminatorFieldDisabled"), &obj.DiscriminatorFieldDisabled, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/lists/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/lists/zz_generated.validations.go index a4a9934bef3..bcaa2f1b228 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/lists/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/lists/zz_generated.validations.go @@ -39,80 +39,146 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ListMap - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ListItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListMap + fn := func( + fldPath *field.Path, + obj, oldObj []ListItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { - return validate.Unique(ctx, op, fldPath, obj, oldObj, func(a ListItem, b ListItem) bool { return a.Name == b.Name }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { + return validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a ListItem, b ListItem) bool { return a.Name == b.Name }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listMap"), obj.ListMap, safe.Field(oldObj, func(oldObj *Struct) []ListItem { return oldObj.ListMap }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ListItem { + return oldObj.ListMap + }) + errs = append(errs, fn(fldPath.Child("listMap"), obj.ListMap, oldVal, oldObj != nil)...) + } - // field Struct.ListMapDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ListItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListMapDisabled + fn := func( + fldPath *field.Path, + obj, oldObj []ListItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { - return validate.Unique(ctx, op, fldPath, obj, oldObj, func(a ListItem, b ListItem) bool { return a.Name == b.Name }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { + return validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a ListItem, b ListItem) bool { return a.Name == b.Name }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listMapDisabled"), obj.ListMapDisabled, safe.Field(oldObj, func(oldObj *Struct) []ListItem { return oldObj.ListMapDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ListItem { + return oldObj.ListMapDisabled + }) + errs = append(errs, fn(fldPath.Child("listMapDisabled"), obj.ListMapDisabled, oldVal, oldObj != nil)...) + } - // field Struct.ListEachVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ListItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListEachVal + fn := func( + fldPath *field.Path, + obj, oldObj []ListItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { - return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ListItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListEachVal/val") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { + return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ListItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListEachVal/val") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listEachVal"), obj.ListEachVal, safe.Field(oldObj, func(oldObj *Struct) []ListItem { return oldObj.ListEachVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ListItem { + return oldObj.ListEachVal + }) + errs = append(errs, fn(fldPath.Child("listEachVal"), obj.ListEachVal, oldVal, oldObj != nil)...) + } - // field Struct.ListEachValDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ListItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ListEachValDisabled + fn := func( + fldPath *field.Path, + obj, oldObj []ListItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { - return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ListItem) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListEachValDisabled/val") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []ListItem) field.ErrorList { + return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ListItem) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ListEachValDisabled/val") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("listEachValDisabled"), obj.ListEachValDisabled, safe.Field(oldObj, func(oldObj *Struct) []ListItem { return oldObj.ListEachValDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ListItem { + return oldObj.ListEachValDisabled + }) + errs = append(errs, fn(fldPath.Child("listEachValDisabled"), obj.ListEachValDisabled, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/maps/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/maps/zz_generated.validations.go index 43ba31a20b0..eb6ba12e355 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/maps/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/maps/zz_generated.validations.go @@ -39,112 +39,204 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapFieldDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapFieldDisabled + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldDisabled") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldDisabled") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapFieldDisabled"), obj.MapFieldDisabled, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapFieldDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapFieldDisabled + }) + errs = append(errs, fn(fldPath.Child("mapFieldDisabled"), obj.MapFieldDisabled, oldVal, oldObj != nil)...) + } - // field Struct.MapFieldEachKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapFieldEachKey + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachKey/key") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachKey/key") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapFieldEachKey"), obj.MapFieldEachKey, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapFieldEachKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapFieldEachKey + }) + errs = append(errs, fn(fldPath.Child("mapFieldEachKey"), obj.MapFieldEachKey, oldVal, oldObj != nil)...) + } - // field Struct.MapFieldEachKeyDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapFieldEachKeyDisabled + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachKeyDisabled/key") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachKeyDisabled/key") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapFieldEachKeyDisabled"), obj.MapFieldEachKeyDisabled, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapFieldEachKeyDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapFieldEachKeyDisabled + }) + errs = append(errs, fn(fldPath.Child("mapFieldEachKeyDisabled"), obj.MapFieldEachKeyDisabled, oldVal, oldObj != nil)...) + } - // field Struct.MapFieldEachVal - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapFieldEachVal + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachVal/val") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachVal/val") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapFieldEachVal"), obj.MapFieldEachVal, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapFieldEachVal }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapFieldEachVal + }) + errs = append(errs, fn(fldPath.Child("mapFieldEachVal"), obj.MapFieldEachVal, oldVal, oldObj != nil)...) + } - // field Struct.MapFieldEachValDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapFieldEachValDisabled + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachValDisabled/val") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapFieldEachValDisabled/val") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapFieldEachValDisabled"), obj.MapFieldEachValDisabled, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapFieldEachValDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapFieldEachValDisabled + }) + errs = append(errs, fn(fldPath.Child("mapFieldEachValDisabled"), obj.MapFieldEachValDisabled, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/simple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/simple/zz_generated.validations.go index c746bcaa009..bf6b6cd4285 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/simple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/simple/zz_generated.validations.go @@ -39,107 +39,198 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.XEnabledField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.XEnabledField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XEnabledField") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XEnabledField") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("xEnabledField"), &obj.XEnabledField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.XEnabledField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.XEnabledField + }) + errs = append(errs, fn(fldPath.Child("xEnabledField"), &obj.XEnabledField, oldVal, oldObj != nil)...) + } - // field Struct.XDisabledField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.XDisabledField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XDisabledField") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XDisabledField") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("xDisabledField"), &obj.XDisabledField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.XDisabledField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.XDisabledField + }) + errs = append(errs, fn(fldPath.Child("xDisabledField"), &obj.XDisabledField, oldVal, oldObj != nil)...) + } - // field Struct.YEnabledField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.YEnabledField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureY", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.YEnabledField") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureY", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.YEnabledField") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("yEnabledField"), &obj.YEnabledField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.YEnabledField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.YEnabledField + }) + errs = append(errs, fn(fldPath.Child("yEnabledField"), &obj.YEnabledField, oldVal, oldObj != nil)...) + } - // field Struct.YDisabledField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.YDisabledField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureY", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.YDisabledField") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureY", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.YDisabledField") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("yDisabledField"), &obj.YDisabledField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.YDisabledField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.YDisabledField + }) + errs = append(errs, fn(fldPath.Child("yDisabledField"), &obj.YDisabledField, oldVal, oldObj != nil)...) + } - // field Struct.XYMixedField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.XYMixedField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureY", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XYMixedField/Y") - })...) - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XYMixedField/X") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureY", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XYMixedField/Y") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.XYMixedField/X") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("xyMixedField"), &obj.XYMixedField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.XYMixedField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.XYMixedField + }) + errs = append(errs, fn(fldPath.Child("xyMixedField"), &obj.XYMixedField, oldVal, oldObj != nil)...) + } - // field Struct.NilableAliasField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MySlice, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.NilableAliasField + fn := func( + fldPath *field.Path, + obj, oldObj MySlice, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MySlice) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.NilableAliasField") - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MySlice) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.NilableAliasField") + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("nilableAliasField"), obj.NilableAliasField, safe.Field(oldObj, func(oldObj *Struct) MySlice { return oldObj.NilableAliasField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MySlice { + return oldObj.NilableAliasField + }) + errs = append(errs, fn(fldPath.Child("nilableAliasField"), obj.NilableAliasField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/subfields/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/subfields/zz_generated.validations.go index 82cab6abbca..5f185ac7742 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/subfields/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/subfields/zz_generated.validations.go @@ -38,52 +38,92 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ObjectMeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ObjectMeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ObjectMeta + fn := func( + fldPath *field.Path, + obj, oldObj *ObjectMeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ObjectMeta) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "xEnabledField", func(o *ObjectMeta) *string { return &o.XEnabledField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ObjectMeta.XEnabledField") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ObjectMeta) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "xEnabledField", + func(o *ObjectMeta) *string { return &o.XEnabledField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ObjectMeta.XEnabledField") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("metadata"), &obj.ObjectMeta, safe.Field(oldObj, func(oldObj *Struct) *ObjectMeta { return &oldObj.ObjectMeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ObjectMeta { + return &oldObj.ObjectMeta + }) + errs = append(errs, fn(fldPath.Child("metadata"), &obj.ObjectMeta, oldVal, oldObj != nil)...) + } - // field Struct.ObjectMetaDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ObjectMeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ObjectMetaDisabled + fn := func( + fldPath *field.Path, + obj, oldObj *ObjectMeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ObjectMeta) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "xDisabledField", func(o *ObjectMeta) *string { return &o.XDisabledField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ObjectMetaDisabled.XDisabledField") - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ObjectMeta) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "xDisabledField", + func(o *ObjectMeta) *string { return &o.XDisabledField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ObjectMetaDisabled.XDisabledField") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("metadataDisabled"), &obj.ObjectMetaDisabled, safe.Field(oldObj, func(oldObj *Struct) *ObjectMeta { return &oldObj.ObjectMetaDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ObjectMeta { + return &oldObj.ObjectMetaDisabled + }) + errs = append(errs, fn(fldPath.Child("metadataDisabled"), &obj.ObjectMetaDisabled, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/unions/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/unions/zz_generated.validations.go index f8b3323e2c3..742e9c719f2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/unions/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/unions/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -54,116 +61,195 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.UnionField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *Union, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UnionField + fn := func( + fldPath *field.Path, + obj, oldObj *Union, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_Union(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("unionField"), &obj.UnionField, safe.Field(oldObj, func(oldObj *Struct) *Union { return &oldObj.UnionField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *Union { + return &oldObj.UnionField + }) + errs = append(errs, fn(fldPath.Child("unionField"), &obj.UnionField, oldVal, oldObj != nil)...) + } - // field Struct.UnionFieldDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *UnionDisabled, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UnionFieldDisabled + fn := func( + fldPath *field.Path, + obj, oldObj *UnionDisabled, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_UnionDisabled(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("unionFieldDisabled"), &obj.UnionFieldDisabled, safe.Field(oldObj, func(oldObj *Struct) *UnionDisabled { return &oldObj.UnionFieldDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *UnionDisabled { + return &oldObj.UnionFieldDisabled + }) + errs = append(errs, fn(fldPath.Child("unionFieldDisabled"), &obj.UnionFieldDisabled, oldVal, oldObj != nil)...) + } - // field Struct.ZeroOrOneOfField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ZeroOrOneOf, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ZeroOrOneOfField + fn := func( + fldPath *field.Path, + obj, oldObj *ZeroOrOneOf, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ZeroOrOneOf(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("zeroOrOneOfField"), &obj.ZeroOrOneOfField, safe.Field(oldObj, func(oldObj *Struct) *ZeroOrOneOf { return &oldObj.ZeroOrOneOfField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ZeroOrOneOf { + return &oldObj.ZeroOrOneOfField + }) + errs = append(errs, fn(fldPath.Child("zeroOrOneOfField"), &obj.ZeroOrOneOfField, oldVal, oldObj != nil)...) + } - // field Struct.ZeroOrOneOfFieldDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *ZeroOrOneOfDisabled, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ZeroOrOneOfFieldDisabled + fn := func( + fldPath *field.Path, + obj, oldObj *ZeroOrOneOfDisabled, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call the type's validation function errs = append(errs, Validate_ZeroOrOneOfDisabled(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("zeroOrOneOfFieldDisabled"), &obj.ZeroOrOneOfFieldDisabled, safe.Field(oldObj, func(oldObj *Struct) *ZeroOrOneOfDisabled { return &oldObj.ZeroOrOneOfFieldDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *ZeroOrOneOfDisabled { + return &oldObj.ZeroOrOneOfFieldDisabled + }) + errs = append(errs, fn(fldPath.Child("zeroOrOneOfFieldDisabled"), &obj.ZeroOrOneOfFieldDisabled, oldVal, oldObj != nil)...) + } - // field Struct.ZeroOrOneOfItem - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Task, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ZeroOrOneOfItem + fn := func( + fldPath *field.Path, + obj, oldObj []Task, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []Task) field.ErrorList { - return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_Struct_zeroOrOneOfItem_, func(list []Task) bool { - for i := range list { - if list[i].Name == "failed" { - return true - } - } - return false - }, func(list []Task) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true - } - } - return false - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []Task) field.ErrorList { + return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_Struct_zeroOrOneOfItem_, + func(list []Task) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } + } + return false + }, + func(list []Task) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } + } + return false + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("zeroOrOneOfItem"), obj.ZeroOrOneOfItem, safe.Field(oldObj, func(oldObj *Struct) []Task { return oldObj.ZeroOrOneOfItem }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Task { + return oldObj.ZeroOrOneOfItem + }) + errs = append(errs, fn(fldPath.Child("zeroOrOneOfItem"), obj.ZeroOrOneOfItem, oldVal, oldObj != nil)...) + } - // field Struct.ZeroOrOneOfItemDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Task, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ZeroOrOneOfItemDisabled + fn := func( + fldPath *field.Path, + obj, oldObj []Task, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []Task) field.ErrorList { - return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_Struct_zeroOrOneOfItemDisabled_, func(list []Task) bool { - for i := range list { - if list[i].Name == "failed" { - return true - } - } - return false - }, func(list []Task) bool { - for i := range list { - if list[i].Name == "succeeded" { - return true - } - } - return false - }) - })...) + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []Task) field.ErrorList { + return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_Struct_zeroOrOneOfItemDisabled_, + func(list []Task) bool { + for i := range list { + if list[i].Name == "failed" { + return true + } + } + return false + }, + func(list []Task) bool { + for i := range list { + if list[i].Name == "succeeded" { + return true + } + } + return false + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Task, b Task) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Task, b Task) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("zeroOrOneOfItemDisabled"), obj.ZeroOrOneOfItemDisabled, safe.Field(oldObj, func(oldObj *Struct) []Task { return oldObj.ZeroOrOneOfItemDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Task { + return oldObj.ZeroOrOneOfItemDisabled + }) + errs = append(errs, fn(fldPath.Child("zeroOrOneOfItemDisabled"), obj.ZeroOrOneOfItemDisabled, oldVal, oldObj != nil)...) + } return errs } @@ -172,27 +258,36 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Union validates an instance of Union according // to declarative validation rules in the API schema. -func Validate_Union(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Union) (errs field.ErrorList) { - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Union) field.ErrorList { - return validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_Union_, func(obj *Union) string { - if obj == nil { - return "" - } - return string(obj.Discriminator) - }, func(obj *Union) bool { - if obj == nil { - return false - } - var z string - return obj.XEnabledField != z - }, func(obj *Union) bool { - if obj == nil { - return false - } - var z string - return obj.XDisabledField != z - }) - })...) +func Validate_Union( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Union) (errs field.ErrorList) { + + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Union) field.ErrorList { + return validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_Union_, + func(obj *Union) string { + if obj == nil { + return "" + } + return string(obj.Discriminator) + }, + func(obj *Union) bool { + if obj == nil { + return false + } + var z string + return obj.XEnabledField != z + }, + func(obj *Union) bool { + if obj == nil { + return false + } + var z string + return obj.XDisabledField != z + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // field Union.Discriminator has no validation // field Union.XEnabledField has no validation @@ -204,27 +299,36 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_UnionDisabled validates an instance of UnionDisabled according // to declarative validation rules in the API schema. -func Validate_UnionDisabled(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnionDisabled) (errs field.ErrorList) { - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnionDisabled) field.ErrorList { - return validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_UnionDisabled_, func(obj *UnionDisabled) string { - if obj == nil { - return "" - } - return string(obj.Discriminator) - }, func(obj *UnionDisabled) bool { - if obj == nil { - return false - } - var z string - return obj.XEnabledField != z - }, func(obj *UnionDisabled) bool { - if obj == nil { - return false - } - var z string - return obj.XDisabledField != z - }) - })...) +func Validate_UnionDisabled( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *UnionDisabled) (errs field.ErrorList) { + + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UnionDisabled) field.ErrorList { + return validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_UnionDisabled_, + func(obj *UnionDisabled) string { + if obj == nil { + return "" + } + return string(obj.Discriminator) + }, + func(obj *UnionDisabled) bool { + if obj == nil { + return false + } + var z string + return obj.XEnabledField != z + }, + func(obj *UnionDisabled) bool { + if obj == nil { + return false + } + var z string + return obj.XDisabledField != z + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // field UnionDisabled.Discriminator has no validation // field UnionDisabled.XEnabledField has no validation @@ -236,22 +340,30 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_ZeroOrOneOf validates an instance of ZeroOrOneOf according // to declarative validation rules in the API schema. -func Validate_ZeroOrOneOf(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ZeroOrOneOf) (errs field.ErrorList) { - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ZeroOrOneOf) field.ErrorList { - return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_ZeroOrOneOf_, func(obj *ZeroOrOneOf) bool { - if obj == nil { - return false - } - var z string - return obj.XEnabledField != z - }, func(obj *ZeroOrOneOf) bool { - if obj == nil { - return false - } - var z string - return obj.XDisabledField != z - }) - })...) +func Validate_ZeroOrOneOf( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ZeroOrOneOf) (errs field.ErrorList) { + + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ZeroOrOneOf) field.ErrorList { + return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_ZeroOrOneOf_, + func(obj *ZeroOrOneOf) bool { + if obj == nil { + return false + } + var z string + return obj.XEnabledField != z + }, + func(obj *ZeroOrOneOf) bool { + if obj == nil { + return false + } + var z string + return obj.XDisabledField != z + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // field ZeroOrOneOf.XEnabledField has no validation // field ZeroOrOneOf.XDisabledField has no validation @@ -262,22 +374,30 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_ZeroOrOneOfDisabled validates an instance of ZeroOrOneOfDisabled according // to declarative validation rules in the API schema. -func Validate_ZeroOrOneOfDisabled(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ZeroOrOneOfDisabled) (errs field.ErrorList) { - errs = append(errs, validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ZeroOrOneOfDisabled) field.ErrorList { - return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_ZeroOrOneOfDisabled_, func(obj *ZeroOrOneOfDisabled) bool { - if obj == nil { - return false - } - var z string - return obj.XEnabledField != z - }, func(obj *ZeroOrOneOfDisabled) bool { - if obj == nil { - return false - } - var z string - return obj.XDisabledField != z - }) - })...) +func Validate_ZeroOrOneOfDisabled( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *ZeroOrOneOfDisabled) (errs field.ErrorList) { + + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *ZeroOrOneOfDisabled) field.ErrorList { + return validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_options_unions_ZeroOrOneOfDisabled_, + func(obj *ZeroOrOneOfDisabled) bool { + if obj == nil { + return false + } + var z string + return obj.XEnabledField != z + }, + func(obj *ZeroOrOneOfDisabled) bool { + if obj == nil { + return false + } + var z string + return obj.XDisabledField != z + }) + }); len(e) != 0 { + errs = append(errs, e...) + } // field ZeroOrOneOfDisabled.XEnabledField has no validation // field ZeroOrOneOfDisabled.XDisabledField has no validation diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/update/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/update/zz_generated.validations.go index 62c95997fe0..0bd134c7c63 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/update/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/options/update/zz_generated.validations.go @@ -38,27 +38,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ImmutableEnabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ImmutableEnabled + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -70,14 +84,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("immutableEnabled"), &obj.ImmutableEnabled, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.ImmutableEnabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.ImmutableEnabled + }) + errs = append(errs, fn(fldPath.Child("immutableEnabled"), &obj.ImmutableEnabled, oldVal, oldObj != nil)...) + } - // field Struct.ImmutableDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ImmutableDisabled + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -89,20 +113,31 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("immutableDisabled"), &obj.ImmutableDisabled, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.ImmutableDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.ImmutableDisabled + }) + errs = append(errs, fn(fldPath.Child("immutableDisabled"), &obj.ImmutableDisabled, oldVal, oldObj != nil)...) + } - // field Struct.UpdateNoModifyEnabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UpdateNoModifyEnabled + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.UpdateValueByCompare(ctx, op, fldPath, obj, oldObj, validate.NoModify) - }); len(e) != 0 { + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", true, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.UpdateValueByCompare(ctx, op, fldPath, obj, oldObj, validate.NoModify) + }); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -110,20 +145,31 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("updateNoModifyEnabled"), &obj.UpdateNoModifyEnabled, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.UpdateNoModifyEnabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.UpdateNoModifyEnabled + }) + errs = append(errs, fn(fldPath.Child("updateNoModifyEnabled"), &obj.UpdateNoModifyEnabled, oldVal, oldObj != nil)...) + } - // field Struct.UpdateNoModifyDisabled - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.UpdateNoModifyDisabled + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.UpdateValueByCompare(ctx, op, fldPath, obj, oldObj, validate.NoModify) - }); len(e) != 0 { + if e := validate.IfOption(ctx, op, fldPath, obj, oldObj, "FeatureX", false, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.UpdateValueByCompare(ctx, op, fldPath, obj, oldObj, validate.NoModify) + }); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -131,7 +177,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("updateNoModifyDisabled"), &obj.UpdateNoModifyDisabled, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.UpdateNoModifyDisabled }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.UpdateNoModifyDisabled + }) + errs = append(errs, fn(fldPath.Child("updateNoModifyDisabled"), &obj.UpdateNoModifyDisabled, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/required/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/required/zz_generated.validations.go index 74c14382916..dc33542654b 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/required/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/required/zz_generated.validations.go @@ -39,67 +39,106 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_IntType validates an instance of IntType according // to declarative validation rules in the API schema. -func Validate_IntType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *IntType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type IntType")...) +func Validate_IntType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *IntType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type IntType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_MapType validates an instance of MapType according // to declarative validation rules in the API schema. -func Validate_MapType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj MapType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType")...) +func Validate_MapType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj MapType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type MapType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_OtherStruct validates an instance of OtherStruct according // to declarative validation rules in the API schema. -func Validate_OtherStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *OtherStruct) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct")...) +func Validate_OtherStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *OtherStruct) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type OtherStruct"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_SliceType validates an instance of SliceType according // to declarative validation rules in the API schema. -func Validate_SliceType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj SliceType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type SliceType")...) +func Validate_SliceType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj SliceType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type SliceType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_StringType validates an instance of StringType according // to declarative validation rules in the API schema. -func Validate_StringType(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *StringType) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType")...) +func Validate_StringType( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *StringType) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type StringType"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -110,16 +149,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } - // field Struct.StringPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -130,16 +181,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringPtrField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringPtrField"), obj.StringPtrField, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.StringPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.StringPtrField + }) + errs = append(errs, fn(fldPath.Child("stringPtrField"), obj.StringPtrField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -150,18 +213,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_StringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return &oldObj.StringTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return &oldObj.StringTypedefField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefField"), &obj.StringTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.StringTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *StringType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *StringType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -172,18 +247,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringTypedefPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_StringType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *StringType { return oldObj.StringTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *StringType { + return oldObj.StringTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("stringTypedefPtrField"), obj.StringTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -194,16 +281,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intField"), &obj.IntField, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.IntField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.IntField + }) + errs = append(errs, fn(fldPath.Child("intField"), &obj.IntField, oldVal, oldObj != nil)...) + } - // field Struct.IntPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -214,16 +313,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntPtrField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("intPtrField"), obj.IntPtrField, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IntPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IntPtrField + }) + errs = append(errs, fn(fldPath.Child("intPtrField"), obj.IntPtrField, oldVal, oldObj != nil)...) + } - // field Struct.IntTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -234,18 +345,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("intTypedefField"), &obj.IntTypedefField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return &oldObj.IntTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return &oldObj.IntTypedefField + }) + errs = append(errs, fn(fldPath.Child("intTypedefField"), &obj.IntTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.IntTypedefPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *IntType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IntTypedefPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *IntType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -256,18 +379,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.IntTypedefPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_IntType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("intTypedefPtrField"), obj.IntTypedefPtrField, safe.Field(oldObj, func(oldObj *Struct) *IntType { return oldObj.IntTypedefPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *IntType { + return oldObj.IntTypedefPtrField + }) + errs = append(errs, fn(fldPath.Child("intTypedefPtrField"), obj.IntTypedefPtrField, oldVal, oldObj != nil)...) + } - // field Struct.BoolField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BoolField + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -278,16 +413,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.BoolField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.BoolField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("boolField"), &obj.BoolField, safe.Field(oldObj, func(oldObj *Struct) *bool { return &oldObj.BoolField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return &oldObj.BoolField + }) + errs = append(errs, fn(fldPath.Child("boolField"), &obj.BoolField, oldVal, oldObj != nil)...) + } - // field Struct.FloatField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.FloatField + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -298,16 +445,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.FloatField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.FloatField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("floatField"), &obj.FloatField, safe.Field(oldObj, func(oldObj *Struct) *float64 { return &oldObj.FloatField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *float64 { + return &oldObj.FloatField + }) + errs = append(errs, fn(fldPath.Child("floatField"), &obj.FloatField, oldVal, oldObj != nil)...) + } - // field Struct.ByteField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *byte, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ByteField + fn := func( + fldPath *field.Path, + obj, oldObj *byte, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -318,16 +477,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ByteField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ByteField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("byteField"), &obj.ByteField, safe.Field(oldObj, func(oldObj *Struct) *byte { return &oldObj.ByteField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *byte { + return &oldObj.ByteField + }) + errs = append(errs, fn(fldPath.Child("byteField"), &obj.ByteField, oldVal, oldObj != nil)...) + } - // field Struct.OtherStructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.OtherStructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -338,18 +509,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OtherStructPtrField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.OtherStructPtrField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_OtherStruct(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("otherStructPtrField"), obj.OtherStructPtrField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return oldObj.OtherStructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return oldObj.OtherStructPtrField + }) + errs = append(errs, fn(fldPath.Child("otherStructPtrField"), obj.OtherStructPtrField, oldVal, oldObj != nil)...) + } - // field Struct.SliceField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceField + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -360,16 +543,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceField"), obj.SliceField, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.SliceField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.SliceField + }) + errs = append(errs, fn(fldPath.Child("sliceField"), obj.SliceField, oldVal, oldObj != nil)...) + } - // field Struct.SliceTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj SliceType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj SliceType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -380,18 +575,30 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.SliceTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_SliceType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("sliceTypedefField"), obj.SliceTypedefField, safe.Field(oldObj, func(oldObj *Struct) SliceType { return oldObj.SliceTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) SliceType { + return oldObj.SliceTypedefField + }) + errs = append(errs, fn(fldPath.Child("sliceTypedefField"), obj.SliceTypedefField, oldVal, oldObj != nil)...) + } - // field Struct.ByteArrayField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []byte, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ByteArrayField + fn := func( + fldPath *field.Path, + obj, oldObj []byte, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -402,16 +609,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ByteArrayField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.ByteArrayField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("byteArrayField"), obj.ByteArrayField, safe.Field(oldObj, func(oldObj *Struct) []byte { return oldObj.ByteArrayField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []byte { + return oldObj.ByteArrayField + }) + errs = append(errs, fn(fldPath.Child("byteArrayField"), obj.ByteArrayField, oldVal, oldObj != nil)...) + } - // field Struct.MapField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapField + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -422,16 +641,28 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapField"), obj.MapField, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.MapField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.MapField + }) + errs = append(errs, fn(fldPath.Child("mapField"), obj.MapField, oldVal, oldObj != nil)...) + } - // field Struct.MapTypedefField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj MapType, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.MapTypedefField + fn := func( + fldPath *field.Path, + obj, oldObj MapType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -442,11 +673,19 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field if earlyReturn { return // do not proceed } - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.MapTypedefField"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_MapType(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("mapTypedefField"), obj.MapTypedefField, safe.Field(oldObj, func(oldObj *Struct) MapType { return oldObj.MapTypedefField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) MapType { + return oldObj.MapTypedefField + }) + errs = append(errs, fn(fldPath.Child("mapTypedefField"), obj.MapTypedefField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/deep/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/deep/zz_generated.validations.go index dc4408587c9..a06b152dfb1 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/deep/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/deep/zz_generated.validations.go @@ -39,102 +39,184 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort structField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.StructField 1") - }) - })...) - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.StructField 2") - }) - })...) + func() { // cohort = "structField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", + func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.StructField 1") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", + func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.StructField 2") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort sliceField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", func(o *OtherStruct) []SmallStruct { return o.SliceField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []SmallStruct) field.ErrorList { - return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.SliceField") - }) - }) - })...) + func() { // cohort = "sliceField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", + func(o *OtherStruct) []SmallStruct { return o.SliceField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []SmallStruct) field.ErrorList { + return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.SliceField") + }) + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort mapField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", func(o *OtherStruct) map[string]SmallStruct { return o.MapField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]SmallStruct) field.ErrorList { - return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.MapField") - }) - }) - })...) + func() { // cohort = "mapField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", + func(o *OtherStruct) map[string]SmallStruct { return o.MapField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]SmallStruct) field.ErrorList { + return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructField.MapField") + }) + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("structField"), &obj.StructField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return &oldObj.StructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return &oldObj.StructField + }) + errs = append(errs, fn(fldPath.Child("structField"), &obj.StructField, oldVal, oldObj != nil)...) + } - // field Struct.StructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort structField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.StructField 1") - }) - })...) - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.StructField 2") - }) - })...) + func() { // cohort = "structField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", + func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.StructField 1") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", + func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.StructField 2") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort sliceField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", func(o *OtherStruct) []SmallStruct { return o.SliceField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []SmallStruct) field.ErrorList { - return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.SliceField") - }) - }) - })...) + func() { // cohort = "sliceField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", + func(o *OtherStruct) []SmallStruct { return o.SliceField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []SmallStruct) field.ErrorList { + return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.SliceField") + }) + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort mapField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", func(o *OtherStruct) map[string]SmallStruct { return o.MapField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]SmallStruct) field.ErrorList { - return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.MapField") - }) - }) - })...) + func() { // cohort = "mapField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", + func(o *OtherStruct) map[string]SmallStruct { return o.MapField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]SmallStruct) field.ErrorList { + return validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *SmallStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "Struct.StructPtrField.MapField") + }) + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("structPtrField"), obj.StructPtrField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return oldObj.StructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return oldObj.StructPtrField + }) + errs = append(errs, fn(fldPath.Child("structPtrField"), obj.StructPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/list/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/list/zz_generated.validations.go index f67719de71b..40898bf8b38 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/list/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/list/zz_generated.validations.go @@ -40,55 +40,97 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.ObjectMeta - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *v1.ObjectMeta, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.ObjectMeta + fn := func( + fldPath *field.Path, + obj, oldObj *v1.ObjectMeta, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort labels - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "labels", func(o *v1.ObjectMeta) map[string]string { return o.Labels }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.EachMapKey(ctx, op, fldPath, obj, oldObj, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "labels key error") - }) - })...) + func() { // cohort = "labels" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "labels", + func(o *v1.ObjectMeta) map[string]string { return o.Labels }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.EachMapKey(ctx, op, fldPath, obj, oldObj, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "labels key error") + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort ownerReferences - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "ownerReferences", func(o *v1.ObjectMeta) []v1.OwnerReference { return o.OwnerReferences }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []v1.OwnerReference) field.ErrorList { - return validate.Unique(ctx, op, fldPath, obj, oldObj, func(a v1.OwnerReference, b v1.OwnerReference) bool { return a.UID == b.UID }) - })...) - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "ownerReferences", func(o *v1.ObjectMeta) []v1.OwnerReference { return o.OwnerReferences }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []v1.OwnerReference) field.ErrorList { - return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a v1.OwnerReference, b v1.OwnerReference) bool { return a.UID == b.UID }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *v1.OwnerReference) field.ErrorList { - return validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", func(o *v1.OwnerReference) *string { return &o.Name }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ownerReference name error") - }) - }) - })...) + func() { // cohort = "ownerReferences" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "ownerReferences", + func(o *v1.ObjectMeta) []v1.OwnerReference { return o.OwnerReferences }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []v1.OwnerReference) field.ErrorList { + return validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a v1.OwnerReference, b v1.OwnerReference) bool { return a.UID == b.UID }) + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "ownerReferences", + func(o *v1.ObjectMeta) []v1.OwnerReference { return o.OwnerReferences }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []v1.OwnerReference) field.ErrorList { + return validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a v1.OwnerReference, b v1.OwnerReference) bool { return a.UID == b.UID }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *v1.OwnerReference) field.ErrorList { + return validate.Subfield(ctx, op, fldPath, obj, oldObj, "name", + func(o *v1.OwnerReference) *string { return &o.Name }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "ownerReference name error") + }) + }) + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort finalizers - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "finalizers", func(o *v1.ObjectMeta) []string { return o.Finalizers }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { - return validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual) - })...) + func() { // cohort = "finalizers" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "finalizers", + func(o *v1.ObjectMeta) []string { return o.Finalizers }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { + return validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual) + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("objectMeta"), &obj.ObjectMeta, safe.Field(oldObj, func(oldObj *Struct) *v1.ObjectMeta { return &oldObj.ObjectMeta }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *v1.ObjectMeta { + return &oldObj.ObjectMeta + }) + errs = append(errs, fn(fldPath.Child("objectMeta"), &obj.ObjectMeta, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/nonincluded/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/nonincluded/zz_generated.validations.go index 07de680b9a8..006ea84d4f9 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/nonincluded/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/nonincluded/zz_generated.validations.go @@ -39,34 +39,58 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - // field Struct.StructType - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *other.StructType, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + { // field Struct.StructType + fn := func( + fldPath *field.Path, + obj, oldObj *other.StructType, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - func() { // cohort stringField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *other.StructType) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.(other.StructType).StringField") - })...) + func() { // cohort = "stringField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *other.StructType) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.(other.StructType).StringField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(safe.Value(fldPath, func() *field.Path { return fldPath.Child("other.StructType") }), &obj.StructType, safe.Field(oldObj, func(oldObj *Struct) *other.StructType { return &oldObj.StructType }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *other.StructType { + return &oldObj.StructType + }) + errs = append(errs, fn(safe.Value(fldPath, func() *field.Path { return fldPath.Child("other.StructType") }), &obj.StructType, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/shallow/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/shallow/zz_generated.validations.go index 69256650d56..bfdd29559ec 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/shallow/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/shallow/zz_generated.validations.go @@ -39,98 +39,176 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StructField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort stringField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.StringField 1") - })...) - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.StringField 2") - })...) + func() { // cohort = "stringField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.StringField 1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.StringField 2") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort pointerField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "pointerField", func(o *OtherStruct) *string { return o.PointerField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.PointerField") - })...) + func() { // cohort = "pointerField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "pointerField", + func(o *OtherStruct) *string { return o.PointerField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.PointerField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort structField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.StructField") - })...) + func() { // cohort = "structField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", + func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.StructField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort sliceField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", func(o *OtherStruct) []string { return o.SliceField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.SliceField") - })...) + func() { // cohort = "sliceField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", + func(o *OtherStruct) []string { return o.SliceField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.SliceField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort mapField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", func(o *OtherStruct) map[string]string { return o.MapField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.MapField") - })...) + func() { // cohort = "mapField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", + func(o *OtherStruct) map[string]string { return o.MapField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructField.MapField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("structField"), &obj.StructField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return &oldObj.StructField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return &oldObj.StructField + }) + errs = append(errs, fn(fldPath.Child("structField"), &obj.StructField, oldVal, oldObj != nil)...) + } - // field Struct.StructPtrField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *OtherStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StructPtrField + fn := func( + fldPath *field.Path, + obj, oldObj *OtherStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - func() { // cohort stringField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.StringField 1") - })...) - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.StringField 2") - })...) + func() { // cohort = "stringField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.StringField 1") + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "stringField", + func(o *OtherStruct) *string { return &o.StringField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.StringField 2") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort pointerField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "pointerField", func(o *OtherStruct) *string { return o.PointerField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.PointerField") - })...) + func() { // cohort = "pointerField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "pointerField", + func(o *OtherStruct) *string { return o.PointerField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.PointerField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort structField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.StructField") - })...) + func() { // cohort = "structField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "structField", + func(o *OtherStruct) *SmallStruct { return &o.StructField }, validate.DirectEqualPtr, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *SmallStruct) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.StructField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort sliceField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", func(o *OtherStruct) []string { return o.SliceField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.SliceField") - })...) + func() { // cohort = "sliceField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "sliceField", + func(o *OtherStruct) []string { return o.SliceField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj []string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.SliceField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() - func() { // cohort mapField - errs = append(errs, validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", func(o *OtherStruct) map[string]string { return o.MapField }, validate.SemanticDeepEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { - return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.MapField") - })...) + func() { // cohort = "mapField" + if e := validate.Subfield(ctx, op, fldPath, obj, oldObj, "mapField", + func(o *OtherStruct) map[string]string { return o.MapField }, validate.SemanticDeepEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj map[string]string) field.ErrorList { + return validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "subfield Struct.StructPtrField.MapField") + }); len(e) != 0 { + errs = append(errs, e...) + } }() return - }(fldPath.Child("structPtrField"), obj.StructPtrField, safe.Field(oldObj, func(oldObj *Struct) *OtherStruct { return oldObj.StructPtrField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *OtherStruct { + return oldObj.StructPtrField + }) + errs = append(errs, fn(fldPath.Child("structPtrField"), obj.StructPtrField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/unions/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/unions/zz_generated.validations.go index c3db28c1ad1..9362b007c9b 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/unions/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/subfield/unions/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,35 +60,53 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.Subfield - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *SubStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.Subfield + fn := func( + fldPath *field.Path, + obj, oldObj *SubStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_subfield_unions_Struct_subfield_, func(obj *SubStruct) string { - if obj == nil { - return "" - } - return string(obj.D) - }, func(obj *SubStruct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *SubStruct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - })...) + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_subfield_unions_Struct_subfield_, + func(obj *SubStruct) string { + if obj == nil { + return "" + } + return string(obj.D) + }, + func(obj *SubStruct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *SubStruct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("subfield"), &obj.Subfield, safe.Field(oldObj, func(oldObj *Struct) *SubStruct { return &oldObj.Subfield }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *SubStruct { + return &oldObj.Subfield + }) + errs = append(errs, fn(fldPath.Child("subfield"), &obj.Subfield, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/issubresource/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/issubresource/zz_generated.validations.go index dfe38b14d79..ef2be6dc5fb 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/issubresource/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/issubresource/zz_generated.validations.go @@ -38,30 +38,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/scale": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/scale": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/root/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/root/zz_generated.validations.go index d71be382579..b7755f0702c 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/root/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/root/zz_generated.validations.go @@ -38,30 +38,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/subresource/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/subresource/zz_generated.validations.go index ee6cba998ce..8b847e8abc4 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/subresource/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/supported_resources/subresource/zz_generated.validations.go @@ -38,30 +38,52 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/", "/scale", "/status", "/x/y": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/", "/scale", "/status", "/x/y": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field T1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/custom_members/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/custom_members/zz_generated.validations.go index 4b600682e9b..4f51996d00d 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/custom_members/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/custom_members/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -52,33 +59,45 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_custom_members_Struct_, func(obj *Struct) string { - if obj == nil { - return "" - } - return string(obj.D) - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_custom_members_Struct_, + func(obj *Struct) string { + if obj == nil { + return "" + } + return string(obj.D) + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.D has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -89,14 +108,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } - // field Struct.M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -107,7 +136,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m2"), obj.M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.M2 + }) + errs = append(errs, fn(fldPath.Child("m2"), obj.M2, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/multiple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/multiple/zz_generated.validations.go index 02a8f459dbb..37dffe59528 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/multiple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/multiple/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,49 +60,66 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_multiple_Struct_union1, func(obj *Struct) string { - if obj == nil { - return "" - } - return string(obj.D1) - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U1M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U1M2 != nil - })...) - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_multiple_Struct_union2, func(obj *Struct) string { - if obj == nil { - return "" - } - return string(obj.D2) - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U2M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U2M2 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_multiple_Struct_union1, + func(obj *Struct) string { + if obj == nil { + return "" + } + return string(obj.D1) + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U1M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U1M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_multiple_Struct_union2, + func(obj *Struct) string { + if obj == nil { + return "" + } + return string(obj.D2) + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U2M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U2M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.D1 has no validation - // field Struct.U1M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U1M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -106,14 +130,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u1m1"), obj.U1M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.U1M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.U1M1 + }) + errs = append(errs, fn(fldPath.Child("u1m1"), obj.U1M1, oldVal, oldObj != nil)...) + } - // field Struct.U1M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U1M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -124,16 +158,26 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u1m2"), obj.U1M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.U1M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.U1M2 + }) + errs = append(errs, fn(fldPath.Child("u1m2"), obj.U1M2, oldVal, oldObj != nil)...) + } // field Struct.D2 has no validation - // field Struct.U2M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U2M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -144,14 +188,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u2m1"), obj.U2M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.U2M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.U2M1 + }) + errs = append(errs, fn(fldPath.Child("u2m1"), obj.U2M1, oldVal, oldObj != nil)...) + } - // field Struct.U2M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U2M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -162,7 +216,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u2m2"), obj.U2M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.U2M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.U2M2 + }) + errs = append(errs, fn(fldPath.Child("u2m2"), obj.U2M2, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/simple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/simple/zz_generated.validations.go index 545db7341df..8df45d9ba56 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/simple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/simple/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,43 +60,57 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_simple_Struct_, func(obj *Struct) string { - if obj == nil { - return "" - } - return string(obj.D) - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return len(obj.M3) != 0 - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return len(obj.M4) != 0 - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_simple_Struct_, + func(obj *Struct) string { + if obj == nil { + return "" + } + return string(obj.D) + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return len(obj.M3) != 0 + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return len(obj.M4) != 0 + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.D has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -100,14 +121,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } - // field Struct.M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -118,14 +149,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m2"), obj.M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.M2 + }) + errs = append(errs, fn(fldPath.Child("m2"), obj.M2, oldVal, oldObj != nil)...) + } - // field Struct.M3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M3 + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -136,14 +177,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m3"), obj.M3, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.M3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.M3 + }) + errs = append(errs, fn(fldPath.Child("m3"), obj.M3, oldVal, oldObj != nil)...) + } - // field Struct.M4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M4 + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -154,7 +205,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m4"), obj.M4, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.M4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.M4 + }) + errs = append(errs, fn(fldPath.Child("m4"), obj.M4, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/sparse/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/sparse/zz_generated.validations.go index d2afbed6e20..148005bf6b1 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/sparse/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/discriminated/sparse/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -52,28 +59,39 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_sparse_Struct_, func(obj *Struct) string { - if obj == nil { - return "" - } - return string(obj.D) - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.DiscriminatedUnion(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_discriminated_sparse_Struct_, + func(obj *Struct) string { + if obj == nil { + return "" + } + return string(obj.D) + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.D has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -84,7 +102,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/custom_members/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/custom_members/zz_generated.validations.go index f0076bf9ba3..d0e8024090e 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/custom_members/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/custom_members/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -52,28 +59,39 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_custom_members_Struct_, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_custom_members_Struct_, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.NonUnionField has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -84,14 +102,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } - // field Struct.M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -102,7 +130,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m2"), obj.M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.M2 + }) + errs = append(errs, fn(fldPath.Child("m2"), obj.M2, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/multiple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/multiple/zz_generated.validations.go index 029fa453494..35d63aac0d0 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/multiple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/multiple/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,39 +60,54 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_multiple_Struct_union1, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U1M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U1M2 != nil - })...) - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_multiple_Struct_union2, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U2M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U2M2 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_multiple_Struct_union1, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U1M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U1M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_multiple_Struct_union2, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U2M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U2M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.NonUnionField has no validation - // field Struct.U1M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U1M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -96,14 +118,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u1m1"), obj.U1M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.U1M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.U1M1 + }) + errs = append(errs, fn(fldPath.Child("u1m1"), obj.U1M1, oldVal, oldObj != nil)...) + } - // field Struct.U1M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U1M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -114,14 +146,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u1m2"), obj.U1M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.U1M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.U1M2 + }) + errs = append(errs, fn(fldPath.Child("u1m2"), obj.U1M2, oldVal, oldObj != nil)...) + } - // field Struct.U2M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U2M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -132,14 +174,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u2m1"), obj.U2M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.U2M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.U2M1 + }) + errs = append(errs, fn(fldPath.Child("u2m1"), obj.U2M1, oldVal, oldObj != nil)...) + } - // field Struct.U2M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U2M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -150,7 +202,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u2m2"), obj.U2M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.U2M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.U2M2 + }) + errs = append(errs, fn(fldPath.Child("u2m2"), obj.U2M2, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/simple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/simple/zz_generated.validations.go index 76eb02c919b..9ebe8bc71c2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/simple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/union/union/undiscriminated/simple/zz_generated.validations.go @@ -39,13 +39,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,49 +60,64 @@ var unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tag // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_simple_Struct_, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - var z string - return obj.M3 != z - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M4 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return len(obj.M5) != 0 - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return len(obj.M6) != 0 - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_union_union_undiscriminated_simple_Struct_, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + var z string + return obj.M3 != z + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M4 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return len(obj.M5) != 0 + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return len(obj.M6) != 0 + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.NonUnionField has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -106,14 +128,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } - // field Struct.M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -124,14 +156,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m2"), obj.M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.M2 + }) + errs = append(errs, fn(fldPath.Child("m2"), obj.M2, oldVal, oldObj != nil)...) + } - // field Struct.M3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M3 + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -142,14 +184,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m3"), &obj.M3, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.M3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.M3 + }) + errs = append(errs, fn(fldPath.Child("m3"), &obj.M3, oldVal, oldObj != nil)...) + } - // field Struct.M4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M4 + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -160,14 +212,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m4"), obj.M4, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.M4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.M4 + }) + errs = append(errs, fn(fldPath.Child("m4"), obj.M4, oldVal, oldObj != nil)...) + } - // field Struct.M5 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M5 + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -178,14 +240,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m5"), obj.M5, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.M5 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.M5 + }) + errs = append(errs, fn(fldPath.Child("m5"), obj.M5, oldVal, oldObj != nil)...) + } - // field Struct.M6 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M6 + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -196,7 +268,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m6"), obj.M6, safe.Field(oldObj, func(oldObj *Struct) map[string]string { return oldObj.M6 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) map[string]string { + return oldObj.M6 + }) + errs = append(errs, fn(fldPath.Child("m6"), obj.M6, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/unique/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/unique/zz_generated.validations.go index f7dd76b8d22..77c2d51348f 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/unique/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/unique/zz_generated.validations.go @@ -39,131 +39,246 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.PrimitiveListUniqueSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.PrimitiveListUniqueSet + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("primitiveListUniqueSet"), obj.PrimitiveListUniqueSet, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.PrimitiveListUniqueSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.PrimitiveListUniqueSet + }) + errs = append(errs, fn(fldPath.Child("primitiveListUniqueSet"), obj.PrimitiveListUniqueSet, oldVal, oldObj != nil)...) + } - // field Struct.SliceMapFieldWithMultipleKeys - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ItemWithMultipleKeys, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceMapFieldWithMultipleKeys + fn := func( + fldPath *field.Path, + obj, oldObj []ItemWithMultipleKeys, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a ItemWithMultipleKeys, b ItemWithMultipleKeys) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a ItemWithMultipleKeys, b ItemWithMultipleKeys) bool { return a.Key1 == b.Key1 && a.Key2 == b.Key2 }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceMapFieldWithMultipleKeys"), obj.SliceMapFieldWithMultipleKeys, safe.Field(oldObj, func(oldObj *Struct) []ItemWithMultipleKeys { return oldObj.SliceMapFieldWithMultipleKeys }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ItemWithMultipleKeys { + return oldObj.SliceMapFieldWithMultipleKeys + }) + errs = append(errs, fn(fldPath.Child("sliceMapFieldWithMultipleKeys"), obj.SliceMapFieldWithMultipleKeys, oldVal, oldObj != nil)...) + } - // field Struct.AtomicListUniqueSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.AtomicListUniqueSet + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicListUniqueSet"), obj.AtomicListUniqueSet, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.AtomicListUniqueSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.AtomicListUniqueSet + }) + errs = append(errs, fn(fldPath.Child("atomicListUniqueSet"), obj.AtomicListUniqueSet, oldVal, oldObj != nil)...) + } - // field Struct.AtomicListUniqueMap - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.AtomicListUniqueMap + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a Item, b Item) bool { return a.Key == b.Key })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a Item, b Item) bool { return a.Key == b.Key }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicListUniqueMap"), obj.AtomicListUniqueMap, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.AtomicListUniqueMap }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.AtomicListUniqueMap + }) + errs = append(errs, fn(fldPath.Child("atomicListUniqueMap"), obj.AtomicListUniqueMap, oldVal, oldObj != nil)...) + } - // field Struct.CustomUniqueListWithTypeSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.CustomUniqueListWithTypeSet + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // Uniqueness validation is implemented via custom, handwritten validation return - }(fldPath.Child("customUniqueListWithTypeSet"), obj.CustomUniqueListWithTypeSet, safe.Field(oldObj, func(oldObj *Struct) []string { return oldObj.CustomUniqueListWithTypeSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []string { + return oldObj.CustomUniqueListWithTypeSet + }) + errs = append(errs, fn(fldPath.Child("customUniqueListWithTypeSet"), obj.CustomUniqueListWithTypeSet, oldVal, oldObj != nil)...) + } - // field Struct.CustomUniqueListWithTypeMap - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []Item, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.CustomUniqueListWithTypeMap + fn := func( + fldPath *field.Path, + obj, oldObj []Item, + oldValueCorrelated bool) (errs field.ErrorList) { // Uniqueness validation is implemented via custom, handwritten validation return - }(fldPath.Child("customUniqueListWithTypeMap"), obj.CustomUniqueListWithTypeMap, safe.Field(oldObj, func(oldObj *Struct) []Item { return oldObj.CustomUniqueListWithTypeMap }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []Item { + return oldObj.CustomUniqueListWithTypeMap + }) + errs = append(errs, fn(fldPath.Child("customUniqueListWithTypeMap"), obj.CustomUniqueListWithTypeMap, oldVal, oldObj != nil)...) + } - // field Struct.SliceMapFieldWithPtrKey - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []PtrKeyStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceMapFieldWithPtrKey + fn := func( + fldPath *field.Path, + obj, oldObj []PtrKeyStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a PtrKeyStruct, b PtrKeyStruct) bool { - return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a PtrKeyStruct, b PtrKeyStruct) bool { + return ((a.Key == nil && b.Key == nil) || (a.Key != nil && b.Key != nil && *a.Key == *b.Key)) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceMapFieldWithPtrKey"), obj.SliceMapFieldWithPtrKey, safe.Field(oldObj, func(oldObj *Struct) []PtrKeyStruct { return oldObj.SliceMapFieldWithPtrKey }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []PtrKeyStruct { + return oldObj.SliceMapFieldWithPtrKey + }) + errs = append(errs, fn(fldPath.Child("sliceMapFieldWithPtrKey"), obj.SliceMapFieldWithPtrKey, oldVal, oldObj != nil)...) + } - // field Struct.SliceMapFieldWithMixedKeys - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ItemWithMixedKeys, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceMapFieldWithMixedKeys + fn := func( + fldPath *field.Path, + obj, oldObj []ItemWithMixedKeys, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a ItemWithMixedKeys, b ItemWithMixedKeys) bool { - return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a ItemWithMixedKeys, b ItemWithMixedKeys) bool { + return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && a.Key2 == b.Key2 + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceMapFieldWithMixedKeys"), obj.SliceMapFieldWithMixedKeys, safe.Field(oldObj, func(oldObj *Struct) []ItemWithMixedKeys { return oldObj.SliceMapFieldWithMixedKeys }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ItemWithMixedKeys { + return oldObj.SliceMapFieldWithMixedKeys + }) + errs = append(errs, fn(fldPath.Child("sliceMapFieldWithMixedKeys"), obj.SliceMapFieldWithMixedKeys, oldVal, oldObj != nil)...) + } - // field Struct.SliceMapFieldWithMultiplePtrKeys - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []ItemWithMultiplePtrKeys, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SliceMapFieldWithMultiplePtrKeys + fn := func( + fldPath *field.Path, + obj, oldObj []ItemWithMultiplePtrKeys, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a ItemWithMultiplePtrKeys, b ItemWithMultiplePtrKeys) bool { - return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && ((a.Key2 == nil && b.Key2 == nil) || (a.Key2 != nil && b.Key2 != nil && *a.Key2 == *b.Key2)) - })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a ItemWithMultiplePtrKeys, b ItemWithMultiplePtrKeys) bool { + return ((a.Key1 == nil && b.Key1 == nil) || (a.Key1 != nil && b.Key1 != nil && *a.Key1 == *b.Key1)) && ((a.Key2 == nil && b.Key2 == nil) || (a.Key2 != nil && b.Key2 != nil && *a.Key2 == *b.Key2)) + }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("sliceMapFieldWithMultiplePtrKeys"), obj.SliceMapFieldWithMultiplePtrKeys, safe.Field(oldObj, func(oldObj *Struct) []ItemWithMultiplePtrKeys { return oldObj.SliceMapFieldWithMultiplePtrKeys }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) []ItemWithMultiplePtrKeys { + return oldObj.SliceMapFieldWithMultiplePtrKeys + }) + errs = append(errs, fn(fldPath.Child("sliceMapFieldWithMultiplePtrKeys"), obj.SliceMapFieldWithMultiplePtrKeys, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/lists/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/lists/zz_generated.validations.go index 127cd37028e..08bcf09aeb4 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/lists/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/lists/zz_generated.validations.go @@ -39,36 +39,56 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type UpdateListStruct - scheme.AddValidationFunc((*UpdateListStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_UpdateListStruct(ctx, op, nil /* fldPath */, obj.(*UpdateListStruct), safe.Cast[*UpdateListStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*UpdateListStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_UpdateListStruct( + ctx, op, nil, /* fldPath */ + obj.(*UpdateListStruct), + safe.Cast[*UpdateListStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_FrozenUserList validates an instance of FrozenUserList according // to declarative validation rules in the API schema. -func Validate_FrozenUserList(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj FrozenUserList) (errs field.ErrorList) { +func Validate_FrozenUserList( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj FrozenUserList) (errs field.ErrorList) { + // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_UpdateListStruct validates an instance of UpdateListStruct according // to declarative validation rules in the API schema. -func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UpdateListStruct) (errs field.ErrorList) { +func Validate_UpdateListStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *UpdateListStruct) (errs field.ErrorList) { + // field UpdateListStruct.TypeMeta has no validation - // field UpdateListStruct.StringSliceNoSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.StringSliceNoSet + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -80,14 +100,24 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("stringSliceNoSet"), obj.StringSliceNoSet, safe.Field(oldObj, func(oldObj *UpdateListStruct) []string { return oldObj.StringSliceNoSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []string { + return oldObj.StringSliceNoSet + }) + errs = append(errs, fn(fldPath.Child("stringSliceNoSet"), obj.StringSliceNoSet, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.StringSliceNoUnset - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.StringSliceNoUnset + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -99,14 +129,24 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("stringSliceNoUnset"), obj.StringSliceNoUnset, safe.Field(oldObj, func(oldObj *UpdateListStruct) []string { return oldObj.StringSliceNoUnset }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []string { + return oldObj.StringSliceNoUnset + }) + errs = append(errs, fn(fldPath.Child("stringSliceNoUnset"), obj.StringSliceNoUnset, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.StringSetNoAdd - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.StringSetNoAdd + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -118,16 +158,28 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringSetNoAdd"), obj.StringSetNoAdd, safe.Field(oldObj, func(oldObj *UpdateListStruct) []string { return oldObj.StringSetNoAdd }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []string { + return oldObj.StringSetNoAdd + }) + errs = append(errs, fn(fldPath.Child("stringSetNoAdd"), obj.StringSetNoAdd, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.StringSetNoRemove - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.StringSetNoRemove + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -139,16 +191,28 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringSetNoRemove"), obj.StringSetNoRemove, safe.Field(oldObj, func(oldObj *UpdateListStruct) []string { return oldObj.StringSetNoRemove }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []string { + return oldObj.StringSetNoRemove + }) + errs = append(errs, fn(fldPath.Child("stringSetNoRemove"), obj.StringSetNoRemove, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.StringSetFrozenShape - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.StringSetFrozenShape + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -160,20 +224,33 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringSetFrozenShape"), obj.StringSetFrozenShape, safe.Field(oldObj, func(oldObj *UpdateListStruct) []string { return oldObj.StringSetFrozenShape }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []string { + return oldObj.StringSetFrozenShape + }) + errs = append(errs, fn(fldPath.Child("stringSetFrozenShape"), obj.StringSetFrozenShape, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.MapListNoAdd - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []UpdateItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.MapListNoAdd + fn := func( + fldPath *field.Path, + obj, oldObj []UpdateItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem); len(e) != 0 { + if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -181,20 +258,34 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapListNoAdd"), obj.MapListNoAdd, safe.Field(oldObj, func(oldObj *UpdateListStruct) []UpdateItem { return oldObj.MapListNoAdd }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []UpdateItem { + return oldObj.MapListNoAdd + }) + errs = append(errs, fn(fldPath.Child("mapListNoAdd"), obj.MapListNoAdd, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.MapListFrozenShape - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []UpdateItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.MapListFrozenShape + fn := func( + fldPath *field.Path, + obj, oldObj []UpdateItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem, validate.NoRemoveItem); len(e) != 0 { + if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem, validate.NoRemoveItem); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -202,20 +293,34 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("mapListFrozenShape"), obj.MapListFrozenShape, safe.Field(oldObj, func(oldObj *UpdateListStruct) []UpdateItem { return oldObj.MapListFrozenShape }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []UpdateItem { + return oldObj.MapListFrozenShape + }) + errs = append(errs, fn(fldPath.Child("mapListFrozenShape"), obj.MapListFrozenShape, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.CompositeKeyList - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []CompositeKeyItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.CompositeKeyList + fn := func( + fldPath *field.Path, + obj, oldObj []CompositeKeyItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, func(a CompositeKeyItem, b CompositeKeyItem) bool { return a.Name == b.Name && a.Priority == b.Priority }, validate.NoRemoveItem); len(e) != 0 { + if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, + func(a CompositeKeyItem, b CompositeKeyItem) bool { return a.Name == b.Name && a.Priority == b.Priority }, validate.NoRemoveItem); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -223,16 +328,29 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a CompositeKeyItem, b CompositeKeyItem) bool { return a.Name == b.Name && a.Priority == b.Priority })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a CompositeKeyItem, b CompositeKeyItem) bool { return a.Name == b.Name && a.Priority == b.Priority }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("compositeKeyList"), obj.CompositeKeyList, safe.Field(oldObj, func(oldObj *UpdateListStruct) []CompositeKeyItem { return oldObj.CompositeKeyList }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []CompositeKeyItem { + return oldObj.CompositeKeyList + }) + errs = append(errs, fn(fldPath.Child("compositeKeyList"), obj.CompositeKeyList, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.AtomicUniqueSetNoAdd - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.AtomicUniqueSetNoAdd + fn := func( + fldPath *field.Path, + obj, oldObj []string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -244,20 +362,33 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicUniqueSetNoAdd"), obj.AtomicUniqueSetNoAdd, safe.Field(oldObj, func(oldObj *UpdateListStruct) []string { return oldObj.AtomicUniqueSetNoAdd }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []string { + return oldObj.AtomicUniqueSetNoAdd + }) + errs = append(errs, fn(fldPath.Child("atomicUniqueSetNoAdd"), obj.AtomicUniqueSetNoAdd, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.AtomicUniqueMapFrozenShape - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []UpdateItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.AtomicUniqueMapFrozenShape + fn := func( + fldPath *field.Path, + obj, oldObj []UpdateItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem, validate.NoRemoveItem); len(e) != 0 { + if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem, validate.NoRemoveItem); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -265,16 +396,29 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("atomicUniqueMapFrozenShape"), obj.AtomicUniqueMapFrozenShape, safe.Field(oldObj, func(oldObj *UpdateListStruct) []UpdateItem { return oldObj.AtomicUniqueMapFrozenShape }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []UpdateItem { + return oldObj.AtomicUniqueMapFrozenShape + }) + errs = append(errs, fn(fldPath.Child("atomicUniqueMapFrozenShape"), obj.AtomicUniqueMapFrozenShape, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.NonComparableSetFrozenShape - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []NonComparableItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.NonComparableSetFrozenShape + fn := func( + fldPath *field.Path, + obj, oldObj []NonComparableItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -286,20 +430,33 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with set semantics require unique values - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual)...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, validate.SemanticDeepEqual); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("nonComparableSetFrozenShape"), obj.NonComparableSetFrozenShape, safe.Field(oldObj, func(oldObj *UpdateListStruct) []NonComparableItem { return oldObj.NonComparableSetFrozenShape }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []NonComparableItem { + return oldObj.NonComparableSetFrozenShape + }) + errs = append(errs, fn(fldPath.Child("nonComparableSetFrozenShape"), obj.NonComparableSetFrozenShape, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.TypedefFrozenList - errs = append(errs, - func(fldPath *field.Path, obj, oldObj FrozenUserList, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.TypedefFrozenList + fn := func( + fldPath *field.Path, + obj, oldObj FrozenUserList, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem, validate.NoRemoveItem); len(e) != 0 { + if e := validate.UpdateSlice(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.NoAddItem, validate.NoRemoveItem); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -309,20 +466,32 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP // call the type's validation function errs = append(errs, Validate_FrozenUserList(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("typedefFrozenList"), obj.TypedefFrozenList, safe.Field(oldObj, func(oldObj *UpdateListStruct) FrozenUserList { return oldObj.TypedefFrozenList }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) FrozenUserList { + return oldObj.TypedefFrozenList + }) + errs = append(errs, fn(fldPath.Child("typedefFrozenList"), obj.TypedefFrozenList, oldVal, oldObj != nil)...) + } - // field UpdateListStruct.EachValNoModifyList - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []UpdateItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateListStruct.EachValNoModifyList + fn := func( + fldPath *field.Path, + obj, oldObj []UpdateItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UpdateItem) field.ErrorList { - return validate.UpdateStruct(ctx, op, fldPath, obj, oldObj, validate.NoModify) - }); len(e) != 0 { + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UpdateItem) field.ErrorList { + return validate.UpdateStruct(ctx, op, fldPath, obj, oldObj, validate.NoModify) + }); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -330,9 +499,18 @@ func Validate_UpdateListStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } // lists with map semantics require unique keys - errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name })...) + if e := validate.Unique(ctx, op, fldPath, obj, oldObj, + func(a UpdateItem, b UpdateItem) bool { return a.Name == b.Name }); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("eachValNoModifyList"), obj.EachValNoModifyList, safe.Field(oldObj, func(oldObj *UpdateListStruct) []UpdateItem { return oldObj.EachValNoModifyList }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateListStruct) []UpdateItem { + return oldObj.EachValNoModifyList + }) + errs = append(errs, fn(fldPath.Child("eachValNoModifyList"), obj.EachValNoModifyList, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/maps/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/maps/zz_generated.validations.go index 51772c7099c..9be8de84b75 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/maps/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/maps/zz_generated.validations.go @@ -39,27 +39,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type UpdateMapStruct - scheme.AddValidationFunc((*UpdateMapStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_UpdateMapStruct(ctx, op, nil /* fldPath */, obj.(*UpdateMapStruct), safe.Cast[*UpdateMapStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*UpdateMapStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_UpdateMapStruct( + ctx, op, nil, /* fldPath */ + obj.(*UpdateMapStruct), + safe.Cast[*UpdateMapStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_UpdateMapStruct validates an instance of UpdateMapStruct according // to declarative validation rules in the API schema. -func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UpdateMapStruct) (errs field.ErrorList) { +func Validate_UpdateMapStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *UpdateMapStruct) (errs field.ErrorList) { + // field UpdateMapStruct.TypeMeta has no validation - // field UpdateMapStruct.MapNoSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateMapStruct.MapNoSet + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -71,14 +85,24 @@ func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("mapNoSet"), obj.MapNoSet, safe.Field(oldObj, func(oldObj *UpdateMapStruct) map[string]string { return oldObj.MapNoSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateMapStruct) map[string]string { + return oldObj.MapNoSet + }) + errs = append(errs, fn(fldPath.Child("mapNoSet"), obj.MapNoSet, oldVal, oldObj != nil)...) + } - // field UpdateMapStruct.MapNoUnset - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateMapStruct.MapNoUnset + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -90,14 +114,24 @@ func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("mapNoUnset"), obj.MapNoUnset, safe.Field(oldObj, func(oldObj *UpdateMapStruct) map[string]string { return oldObj.MapNoUnset }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateMapStruct) map[string]string { + return oldObj.MapNoUnset + }) + errs = append(errs, fn(fldPath.Child("mapNoUnset"), obj.MapNoUnset, oldVal, oldObj != nil)...) + } - // field UpdateMapStruct.MapNoAdd - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateMapStruct.MapNoAdd + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -109,14 +143,24 @@ func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("mapNoAdd"), obj.MapNoAdd, safe.Field(oldObj, func(oldObj *UpdateMapStruct) map[string]string { return oldObj.MapNoAdd }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateMapStruct) map[string]string { + return oldObj.MapNoAdd + }) + errs = append(errs, fn(fldPath.Child("mapNoAdd"), obj.MapNoAdd, oldVal, oldObj != nil)...) + } - // field UpdateMapStruct.MapNoRemove - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateMapStruct.MapNoRemove + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -128,14 +172,24 @@ func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("mapNoRemove"), obj.MapNoRemove, safe.Field(oldObj, func(oldObj *UpdateMapStruct) map[string]string { return oldObj.MapNoRemove }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateMapStruct) map[string]string { + return oldObj.MapNoRemove + }) + errs = append(errs, fn(fldPath.Child("mapNoRemove"), obj.MapNoRemove, oldVal, oldObj != nil)...) + } - // field UpdateMapStruct.MapFrozenShape - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateMapStruct.MapFrozenShape + fn := func( + fldPath *field.Path, + obj, oldObj map[string]string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -147,14 +201,24 @@ func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("mapFrozenShape"), obj.MapFrozenShape, safe.Field(oldObj, func(oldObj *UpdateMapStruct) map[string]string { return oldObj.MapFrozenShape }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateMapStruct) map[string]string { + return oldObj.MapFrozenShape + }) + errs = append(errs, fn(fldPath.Child("mapFrozenShape"), obj.MapFrozenShape, oldVal, oldObj != nil)...) + } - // field UpdateMapStruct.MapSetThenFreeze - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateMapStruct.MapSetThenFreeze + fn := func( + fldPath *field.Path, + obj, oldObj map[string]MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -166,20 +230,31 @@ func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("mapSetThenFreeze"), obj.MapSetThenFreeze, safe.Field(oldObj, func(oldObj *UpdateMapStruct) map[string]MapItem { return oldObj.MapSetThenFreeze }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateMapStruct) map[string]MapItem { + return oldObj.MapSetThenFreeze + }) + errs = append(errs, fn(fldPath.Child("mapSetThenFreeze"), obj.MapSetThenFreeze, oldVal, oldObj != nil)...) + } - // field UpdateMapStruct.EachValNoModifyMap - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]MapItem, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateMapStruct.EachValNoModifyMap + fn := func( + fldPath *field.Path, + obj, oldObj map[string]MapItem, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false - if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { - return validate.UpdateStruct(ctx, op, fldPath, obj, oldObj, validate.NoModify) - }); len(e) != 0 { + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, + func(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *MapItem) field.ErrorList { + return validate.UpdateStruct(ctx, op, fldPath, obj, oldObj, validate.NoModify) + }); len(e) != 0 { errs = append(errs, e...) earlyReturn = true } @@ -187,7 +262,13 @@ func Validate_UpdateMapStruct(ctx context.Context, op operation.Operation, fldPa return // do not proceed } return - }(fldPath.Child("eachValNoModifyMap"), obj.EachValNoModifyMap, safe.Field(oldObj, func(oldObj *UpdateMapStruct) map[string]MapItem { return oldObj.EachValNoModifyMap }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateMapStruct) map[string]MapItem { + return oldObj.EachValNoModifyMap + }) + errs = append(errs, fn(fldPath.Child("eachValNoModifyMap"), obj.EachValNoModifyMap, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/primitives/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/primitives/zz_generated.validations.go index 8fa11687ffc..2bac5245e0b 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/primitives/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/update/primitives/zz_generated.validations.go @@ -39,27 +39,41 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type UpdateTestStruct - scheme.AddValidationFunc((*UpdateTestStruct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_UpdateTestStruct(ctx, op, nil /* fldPath */, obj.(*UpdateTestStruct), safe.Cast[*UpdateTestStruct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*UpdateTestStruct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_UpdateTestStruct( + ctx, op, nil, /* fldPath */ + obj.(*UpdateTestStruct), + safe.Cast[*UpdateTestStruct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_UpdateTestStruct validates an instance of UpdateTestStruct according // to declarative validation rules in the API schema. -func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *UpdateTestStruct) (errs field.ErrorList) { +func Validate_UpdateTestStruct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *UpdateTestStruct) (errs field.ErrorList) { + // field UpdateTestStruct.TypeMeta has no validation - // field UpdateTestStruct.StringNoSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.StringNoSet + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -71,14 +85,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("stringNoSet"), &obj.StringNoSet, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return &oldObj.StringNoSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return &oldObj.StringNoSet + }) + errs = append(errs, fn(fldPath.Child("stringNoSet"), &obj.StringNoSet, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.StringNoUnset - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.StringNoUnset + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -90,14 +114,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("stringNoUnset"), &obj.StringNoUnset, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return &oldObj.StringNoUnset }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return &oldObj.StringNoUnset + }) + errs = append(errs, fn(fldPath.Child("stringNoUnset"), &obj.StringNoUnset, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.StringNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.StringNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -109,14 +143,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("stringNoModify"), &obj.StringNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return &oldObj.StringNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return &oldObj.StringNoModify + }) + errs = append(errs, fn(fldPath.Child("stringNoModify"), &obj.StringNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.StringFullyRestricted - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.StringFullyRestricted + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -128,14 +172,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("stringFullyRestricted"), &obj.StringFullyRestricted, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return &oldObj.StringFullyRestricted }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return &oldObj.StringFullyRestricted + }) + errs = append(errs, fn(fldPath.Child("stringFullyRestricted"), &obj.StringFullyRestricted, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.StringSetOnce - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.StringSetOnce + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -147,14 +201,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("stringSetOnce"), &obj.StringSetOnce, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return &oldObj.StringSetOnce }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return &oldObj.StringSetOnce + }) + errs = append(errs, fn(fldPath.Child("stringSetOnce"), &obj.StringSetOnce, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.IntNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.IntNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -166,14 +230,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("intNoModify"), &obj.IntNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *int { return &oldObj.IntNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *int { + return &oldObj.IntNoModify + }) + errs = append(errs, fn(fldPath.Child("intNoModify"), &obj.IntNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.Int32NoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.Int32NoModify + fn := func( + fldPath *field.Path, + obj, oldObj *int32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -185,14 +259,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("int32NoModify"), &obj.Int32NoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *int32 { return &oldObj.Int32NoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *int32 { + return &oldObj.Int32NoModify + }) + errs = append(errs, fn(fldPath.Child("int32NoModify"), &obj.Int32NoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.Int64NoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.Int64NoModify + fn := func( + fldPath *field.Path, + obj, oldObj *int64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -204,14 +288,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("int64NoModify"), &obj.Int64NoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *int64 { return &oldObj.Int64NoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *int64 { + return &oldObj.Int64NoModify + }) + errs = append(errs, fn(fldPath.Child("int64NoModify"), &obj.Int64NoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.UintNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *uint, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.UintNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *uint, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -223,14 +317,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("uintNoModify"), &obj.UintNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *uint { return &oldObj.UintNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *uint { + return &oldObj.UintNoModify + }) + errs = append(errs, fn(fldPath.Child("uintNoModify"), &obj.UintNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.BoolNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.BoolNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -242,14 +346,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("boolNoModify"), &obj.BoolNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *bool { return &oldObj.BoolNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *bool { + return &oldObj.BoolNoModify + }) + errs = append(errs, fn(fldPath.Child("boolNoModify"), &obj.BoolNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.Float32NoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float32, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.Float32NoModify + fn := func( + fldPath *field.Path, + obj, oldObj *float32, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -261,14 +375,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("float32NoModify"), &obj.Float32NoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *float32 { return &oldObj.Float32NoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *float32 { + return &oldObj.Float32NoModify + }) + errs = append(errs, fn(fldPath.Child("float32NoModify"), &obj.Float32NoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.Float64NoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.Float64NoModify + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -280,14 +404,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("float64NoModify"), &obj.Float64NoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *float64 { return &oldObj.Float64NoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *float64 { + return &oldObj.Float64NoModify + }) + errs = append(errs, fn(fldPath.Child("float64NoModify"), &obj.Float64NoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.ByteNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *byte, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.ByteNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *byte, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -299,14 +433,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("byteNoModify"), &obj.ByteNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *byte { return &oldObj.ByteNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *byte { + return &oldObj.ByteNoModify + }) + errs = append(errs, fn(fldPath.Child("byteNoModify"), &obj.ByteNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.StructNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *TestStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.StructNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *TestStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -318,14 +462,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("structNoModify"), &obj.StructNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *TestStruct { return &oldObj.StructNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *TestStruct { + return &oldObj.StructNoModify + }) + errs = append(errs, fn(fldPath.Child("structNoModify"), &obj.StructNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.NonComparableStructNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *NonComparableStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.NonComparableStructNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *NonComparableStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -337,14 +491,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("nonComparableStructNoModify"), &obj.NonComparableStructNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *NonComparableStruct { return &oldObj.NonComparableStructNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *NonComparableStruct { + return &oldObj.NonComparableStructNoModify + }) + errs = append(errs, fn(fldPath.Child("nonComparableStructNoModify"), &obj.NonComparableStructNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.PointerNoSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.PointerNoSet + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -356,14 +520,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("pointerNoSet"), obj.PointerNoSet, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return oldObj.PointerNoSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return oldObj.PointerNoSet + }) + errs = append(errs, fn(fldPath.Child("pointerNoSet"), obj.PointerNoSet, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.PointerNoUnset - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.PointerNoUnset + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -375,14 +549,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("pointerNoUnset"), obj.PointerNoUnset, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return oldObj.PointerNoUnset }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return oldObj.PointerNoUnset + }) + errs = append(errs, fn(fldPath.Child("pointerNoUnset"), obj.PointerNoUnset, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.PointerNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.PointerNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -394,14 +578,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("pointerNoModify"), obj.PointerNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return oldObj.PointerNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return oldObj.PointerNoModify + }) + errs = append(errs, fn(fldPath.Child("pointerNoModify"), obj.PointerNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.PointerFullyRestricted - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.PointerFullyRestricted + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -413,14 +607,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("pointerFullyRestricted"), obj.PointerFullyRestricted, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *string { return oldObj.PointerFullyRestricted }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *string { + return oldObj.PointerFullyRestricted + }) + errs = append(errs, fn(fldPath.Child("pointerFullyRestricted"), obj.PointerFullyRestricted, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.IntPointerNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.IntPointerNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -432,14 +636,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("intPointerNoModify"), obj.IntPointerNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *int { return oldObj.IntPointerNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *int { + return oldObj.IntPointerNoModify + }) + errs = append(errs, fn(fldPath.Child("intPointerNoModify"), obj.IntPointerNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.BoolPointerNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.BoolPointerNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -451,14 +665,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("boolPointerNoModify"), obj.BoolPointerNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *bool { return oldObj.BoolPointerNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *bool { + return oldObj.BoolPointerNoModify + }) + errs = append(errs, fn(fldPath.Child("boolPointerNoModify"), obj.BoolPointerNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.StructPointerNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *TestStruct, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.StructPointerNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *TestStruct, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -470,14 +694,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("structPointerNoModify"), obj.StructPointerNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *TestStruct { return oldObj.StructPointerNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *TestStruct { + return oldObj.StructPointerNoModify + }) + errs = append(errs, fn(fldPath.Child("structPointerNoModify"), obj.StructPointerNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.CustomTypeNoModify - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *CustomString, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.CustomTypeNoModify + fn := func( + fldPath *field.Path, + obj, oldObj *CustomString, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -489,14 +723,24 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("customTypeNoModify"), &obj.CustomTypeNoModify, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *CustomString { return &oldObj.CustomTypeNoModify }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *CustomString { + return &oldObj.CustomTypeNoModify + }) + errs = append(errs, fn(fldPath.Child("customTypeNoModify"), &obj.CustomTypeNoModify, oldVal, oldObj != nil)...) + } - // field UpdateTestStruct.CustomTypeNoSet - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *CustomInt, oldValueCorrelated bool) (errs field.ErrorList) { + { // field UpdateTestStruct.CustomTypeNoSet + fn := func( + fldPath *field.Path, + obj, oldObj *CustomInt, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -508,7 +752,13 @@ func Validate_UpdateTestStruct(ctx context.Context, op operation.Operation, fldP return // do not proceed } return - }(fldPath.Child("customTypeNoSet"), &obj.CustomTypeNoSet, safe.Field(oldObj, func(oldObj *UpdateTestStruct) *CustomInt { return &oldObj.CustomTypeNoSet }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *UpdateTestStruct) *CustomInt { + return &oldObj.CustomTypeNoSet + }) + errs = append(errs, fn(fldPath.Child("customTypeNoSet"), &obj.CustomTypeNoSet, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_false/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_false/zz_generated.validations.go index f2f535af986..551b70fa22d 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_false/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_false/zz_generated.validations.go @@ -38,32 +38,54 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field Struct.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_true/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_true/zz_generated.validations.go index 64edd69dd3a..eea30b7e589 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_true/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validate_true/zz_generated.validations.go @@ -38,32 +38,54 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field Struct.StringField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field Struct.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruealpha/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruealpha/zz_generated.validations.go index cc9cd6c7103..670aa29bdba 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruealpha/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruealpha/zz_generated.validations.go @@ -38,32 +38,54 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field Struct.StringField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field Struct.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruebeta/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruebeta/zz_generated.validations.go index 3c4beae25c6..73d5b60fa89 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruebeta/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/validatetruebeta/zz_generated.validations.go @@ -38,32 +38,54 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + // field Struct.TypeMeta has no validation - // field Struct.StringField - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.StringField + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field Struct.StringField")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, true, "field Struct.StringField"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("stringField"), &obj.StringField, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.StringField }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.StringField + }) + errs = append(errs, fn(fldPath.Child("stringField"), &obj.StringField, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/custom_members/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/custom_members/zz_generated.validations.go index 90cdf50da32..b90cf26f3e9 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/custom_members/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/custom_members/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -52,28 +59,39 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_custom_members_Struct_, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_custom_members_Struct_, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.NonUnionField has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -84,14 +102,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } - // field Struct.M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -102,7 +130,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m2"), obj.M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.M2 + }) + errs = append(errs, fn(fldPath.Child("m2"), obj.M2, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/multiple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/multiple/zz_generated.validations.go index 4e73c44d4fc..4a53ffb70b3 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/multiple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/multiple/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -53,39 +60,54 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_multiple_Struct_union1, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U1M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U1M2 != nil - })...) - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_multiple_Struct_union2, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U2M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.U2M2 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_multiple_Struct_union1, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U1M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U1M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_multiple_Struct_union2, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U2M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.U2M2 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.NonUnionField has no validation - // field Struct.U1M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U1M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -96,14 +118,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u1m1"), obj.U1M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.U1M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.U1M1 + }) + errs = append(errs, fn(fldPath.Child("u1m1"), obj.U1M1, oldVal, oldObj != nil)...) + } - // field Struct.U1M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U1M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -114,14 +146,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u1m2"), obj.U1M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.U1M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.U1M2 + }) + errs = append(errs, fn(fldPath.Child("u1m2"), obj.U1M2, oldVal, oldObj != nil)...) + } - // field Struct.U2M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U2M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -132,14 +174,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u2m1"), obj.U2M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.U2M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.U2M1 + }) + errs = append(errs, fn(fldPath.Child("u2m1"), obj.U2M1, oldVal, oldObj != nil)...) + } - // field Struct.U2M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.U2M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -150,7 +202,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("u2m2"), obj.U2M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.U2M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.U2M2 + }) + errs = append(errs, fn(fldPath.Child("u2m2"), obj.U2M2, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/simple/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/simple/zz_generated.validations.go index 3a2d4ee6d40..5779befd2a8 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/simple/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/tags/zerooroneof/zerooroneof/simple/zz_generated.validations.go @@ -38,13 +38,20 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } @@ -52,39 +59,52 @@ var zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tes // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - errs = append(errs, validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_simple_Struct_, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M1 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M2 != nil - }, func(obj *Struct) bool { - if obj == nil { - return false - } - var z string - return obj.M3 != z - }, func(obj *Struct) bool { - if obj == nil { - return false - } - return obj.M4 != nil - })...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { + + if e := validate.ZeroOrOneOfUnion(ctx, op, fldPath, obj, oldObj, zeroOrOneOfMembershipFor_k8s_io_code_generator_cmd_validation_gen_output_tests_tags_zerooroneof_zerooroneof_simple_Struct_, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M1 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M2 != nil + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + var z string + return obj.M3 != z + }, + func(obj *Struct) bool { + if obj == nil { + return false + } + return obj.M4 != nil + }); len(e) != 0 { + errs = append(errs, e...) + } // field Struct.TypeMeta has no validation // field Struct.NonUnionField has no validation - // field Struct.M1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M1 + fn := func( + fldPath *field.Path, + obj, oldObj *M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -95,14 +115,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m1"), obj.M1, safe.Field(oldObj, func(oldObj *Struct) *M1 { return oldObj.M1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M1 { + return oldObj.M1 + }) + errs = append(errs, fn(fldPath.Child("m1"), obj.M1, oldVal, oldObj != nil)...) + } - // field Struct.M2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *M2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M2 + fn := func( + fldPath *field.Path, + obj, oldObj *M2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -113,14 +143,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m2"), obj.M2, safe.Field(oldObj, func(oldObj *Struct) *M2 { return oldObj.M2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *M2 { + return oldObj.M2 + }) + errs = append(errs, fn(fldPath.Child("m2"), obj.M2, oldVal, oldObj != nil)...) + } - // field Struct.M3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M3 + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -131,14 +171,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m3"), &obj.M3, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.M3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.M3 + }) + errs = append(errs, fn(fldPath.Child("m3"), &obj.M3, oldVal, oldObj != nil)...) + } - // field Struct.M4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.M4 + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -149,7 +199,13 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("m4"), obj.M4, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.M4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.M4 + }) + errs = append(errs, fn(fldPath.Child("m4"), obj.M4, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/type_args/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/type_args/zz_generated.validations.go index afe42d55a1f..ddad3837071 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/type_args/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/type_args/zz_generated.validations.go @@ -39,108 +39,195 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_E1 validates an instance of E1 according // to declarative validation rules in the API schema. -func Validate_E1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1")...) +func Validate_E1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E1) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + // field T1.TypeMeta has no validation - // field T1.S1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.S1 + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult[*primitives.T1](ctx, op, fldPath, obj, oldObj, false, "T1.S1")...) + if e := validate.FixedResult[*primitives.T1](ctx, op, fldPath, obj, oldObj, false, "T1.S1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, primitives.Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("s1"), obj.S1, safe.Field(oldObj, func(oldObj *T1) *primitives.T1 { return oldObj.S1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T1 { + return oldObj.S1 + }) + errs = append(errs, fn(fldPath.Child("s1"), obj.S1, oldVal, oldObj != nil)...) + } - // field T1.PS1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *primitives.T1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PS1 + fn := func( + fldPath *field.Path, + obj, oldObj *primitives.T1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult[*primitives.T1](ctx, op, fldPath, obj, oldObj, false, "PT1.PS1")...) + if e := validate.FixedResult[*primitives.T1](ctx, op, fldPath, obj, oldObj, false, "PT1.PS1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, primitives.Validate_T1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("ps1"), obj.PS1, safe.Field(oldObj, func(oldObj *T1) *primitives.T1 { return oldObj.PS1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *primitives.T1 { + return oldObj.PS1 + }) + errs = append(errs, fn(fldPath.Child("ps1"), obj.PS1, oldVal, oldObj != nil)...) + } - // field T1.E1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.E1 + fn := func( + fldPath *field.Path, + obj, oldObj *E1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult[*E1](ctx, op, fldPath, obj, oldObj, false, "T1.E1")...) + if e := validate.FixedResult[*E1](ctx, op, fldPath, obj, oldObj, false, "T1.E1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("e1"), &obj.E1, safe.Field(oldObj, func(oldObj *T1) *E1 { return &oldObj.E1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E1 { + return &oldObj.E1 + }) + errs = append(errs, fn(fldPath.Child("e1"), &obj.E1, oldVal, oldObj != nil)...) + } - // field T1.PE1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PE1 + fn := func( + fldPath *field.Path, + obj, oldObj *E1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult[*E1](ctx, op, fldPath, obj, oldObj, true, "T1.PE1")...) + if e := validate.FixedResult[*E1](ctx, op, fldPath, obj, oldObj, true, "T1.PE1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pe1"), obj.PE1, safe.Field(oldObj, func(oldObj *T1) *E1 { return oldObj.PE1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E1 { + return oldObj.PE1 + }) + errs = append(errs, fn(fldPath.Child("pe1"), obj.PE1, oldVal, oldObj != nil)...) + } - // field T1.I1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.I1 + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult[*int](ctx, op, fldPath, obj, oldObj, false, "T1.I1")...) + if e := validate.FixedResult[*int](ctx, op, fldPath, obj, oldObj, false, "T1.I1"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("i1"), &obj.I1, safe.Field(oldObj, func(oldObj *T1) *int { return &oldObj.I1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *int { + return &oldObj.I1 + }) + errs = append(errs, fn(fldPath.Child("i1"), &obj.I1, oldVal, oldObj != nil)...) + } - // field T1.PI1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PI1 + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult[*int](ctx, op, fldPath, obj, oldObj, true, "T1.PI1")...) + if e := validate.FixedResult[*int](ctx, op, fldPath, obj, oldObj, true, "T1.PI1"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("pi1"), obj.PI1, safe.Field(oldObj, func(oldObj *T1) *int { return oldObj.PI1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *int { + return oldObj.PI1 + }) + errs = append(errs, fn(fldPath.Child("pi1"), obj.PI1, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/typedefs/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/typedefs/zz_generated.validations.go index d0dc30ea080..ca5c5b891af 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/typedefs/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/typedefs/zz_generated.validations.go @@ -38,226 +38,407 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_E1 validates an instance of E1 according // to declarative validation rules in the API schema. -func Validate_E1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1")...) +func Validate_E1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E1) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E1"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_E2 validates an instance of E2 according // to declarative validation rules in the API schema. -func Validate_E2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E2) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E2")...) +func Validate_E2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E2) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E2"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_E3 validates an instance of E3 according // to declarative validation rules in the API schema. -func Validate_E3(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E3) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E3")...) +func Validate_E3( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E3) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E3"); len(e) != 0 { + errs = append(errs, e...) + } return errs } // Validate_E4 validates an instance of E4 according // to declarative validation rules in the API schema. -func Validate_E4(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *E4) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E4")...) +func Validate_E4( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *E4) (errs field.ErrorList) { - // field E4.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type E4"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field E4.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *E4) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *E4) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1")...) +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T1"); len(e) != 0 { + errs = append(errs, e...) + } // field T1.TypeMeta has no validation - // field T1.E1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.E1 + fn := func( + fldPath *field.Path, + obj, oldObj *E1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E1")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("e1"), &obj.E1, safe.Field(oldObj, func(oldObj *T1) *E1 { return &oldObj.E1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E1 { + return &oldObj.E1 + }) + errs = append(errs, fn(fldPath.Child("e1"), &obj.E1, oldVal, oldObj != nil)...) + } - // field T1.PE1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E1, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PE1 + fn := func( + fldPath *field.Path, + obj, oldObj *E1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE1")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE1"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E1(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pe1"), obj.PE1, safe.Field(oldObj, func(oldObj *T1) *E1 { return oldObj.PE1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E1 { + return oldObj.PE1 + }) + errs = append(errs, fn(fldPath.Child("pe1"), obj.PE1, oldVal, oldObj != nil)...) + } - // field T1.E2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.E2 + fn := func( + fldPath *field.Path, + obj, oldObj *E2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("e2"), &obj.E2, safe.Field(oldObj, func(oldObj *T1) *E2 { return &oldObj.E2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E2 { + return &oldObj.E2 + }) + errs = append(errs, fn(fldPath.Child("e2"), &obj.E2, oldVal, oldObj != nil)...) + } - // field T1.PE2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PE2 + fn := func( + fldPath *field.Path, + obj, oldObj *E2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pe2"), obj.PE2, safe.Field(oldObj, func(oldObj *T1) *E2 { return oldObj.PE2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E2 { + return oldObj.PE2 + }) + errs = append(errs, fn(fldPath.Child("pe2"), obj.PE2, oldVal, oldObj != nil)...) + } - // field T1.E3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.E3 + fn := func( + fldPath *field.Path, + obj, oldObj *E3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E3")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E3"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E3(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("e3"), &obj.E3, safe.Field(oldObj, func(oldObj *T1) *E3 { return &oldObj.E3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E3 { + return &oldObj.E3 + }) + errs = append(errs, fn(fldPath.Child("e3"), &obj.E3, oldVal, oldObj != nil)...) + } - // field T1.PE3 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E3, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PE3 + fn := func( + fldPath *field.Path, + obj, oldObj *E3, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE3")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE3"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E3(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pe3"), obj.PE3, safe.Field(oldObj, func(oldObj *T1) *E3 { return oldObj.PE3 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E3 { + return oldObj.PE3 + }) + errs = append(errs, fn(fldPath.Child("pe3"), obj.PE3, oldVal, oldObj != nil)...) + } - // field T1.E4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E4, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.E4 + fn := func( + fldPath *field.Path, + obj, oldObj *E4, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E4")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.E4"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E4(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("e4"), &obj.E4, safe.Field(oldObj, func(oldObj *T1) *E4 { return &oldObj.E4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E4 { + return &oldObj.E4 + }) + errs = append(errs, fn(fldPath.Child("e4"), &obj.E4, oldVal, oldObj != nil)...) + } - // field T1.PE4 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *E4, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PE4 + fn := func( + fldPath *field.Path, + obj, oldObj *E4, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE4")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PE4"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_E4(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pe4"), obj.PE4, safe.Field(oldObj, func(oldObj *T1) *E4 { return oldObj.PE4 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *E4 { + return oldObj.PE4 + }) + errs = append(errs, fn(fldPath.Child("pe4"), obj.PE4, oldVal, oldObj != nil)...) + } - // field T1.T2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.T2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.T2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("t2"), &obj.T2, safe.Field(oldObj, func(oldObj *T1) *T2 { return &oldObj.T2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return &oldObj.T2 + }) + errs = append(errs, fn(fldPath.Child("t2"), &obj.T2, oldVal, oldObj != nil)...) + } - // field T1.PT2 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *T2, oldValueCorrelated bool) (errs field.ErrorList) { + { // field T1.PT2 + fn := func( + fldPath *field.Path, + obj, oldObj *T2, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PT2")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T1.PT2"); len(e) != 0 { + errs = append(errs, e...) + } // call the type's validation function errs = append(errs, Validate_T2(ctx, op, fldPath, obj, oldObj)...) return - }(fldPath.Child("pt2"), obj.PT2, safe.Field(oldObj, func(oldObj *T1) *T2 { return oldObj.PT2 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) *T2 { + return oldObj.PT2 + }) + errs = append(errs, fn(fldPath.Child("pt2"), obj.PT2, oldVal, oldObj != nil)...) + } return errs } // Validate_T2 validates an instance of T2 according // to declarative validation rules in the API schema. -func Validate_T2(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T2) (errs field.ErrorList) { - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T2")...) +func Validate_T2( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T2) (errs field.ErrorList) { - // field T2.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "type T2"); len(e) != 0 { + errs = append(errs, e...) + } + + { // field T2.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "field T2.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *T2) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T2) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/lists/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/lists/zz_generated.validations.go index 530fe6e7602..90c952071d2 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/lists/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/lists/zz_generated.validations.go @@ -39,56 +39,100 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type M1 - scheme.AddValidationFunc((*M1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_M1(ctx, op, nil /* fldPath */, obj.(*M1), safe.Cast[*M1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*M1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_M1( + ctx, op, nil, /* fldPath */ + obj.(*M1), + safe.Cast[*M1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_M1 validates an instance of M1 according // to declarative validation rules in the API schema. -func Validate_M1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *M1) (errs field.ErrorList) { - // field M1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_M1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *M1) (errs field.ErrorList) { + + { // field M1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "M1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "M1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *M1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *M1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.LM1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj []M1, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.LM1 + fn := func( + fldPath *field.Path, + obj, oldObj []M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // iterate the list and call the type's validation function - errs = append(errs, validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_M1)...) + if e := validate.EachSliceVal(ctx, op, fldPath, obj, oldObj, nil, nil, Validate_M1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("lm1"), obj.LM1, safe.Field(oldObj, func(oldObj *T1) []M1 { return oldObj.LM1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) []M1 { + return oldObj.LM1 + }) + errs = append(errs, fn(fldPath.Child("lm1"), obj.LM1, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/maps/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/maps/zz_generated.validations.go index 0540e426e3e..02a63794221 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/maps/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/maps/zz_generated.validations.go @@ -39,56 +39,100 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type M1 - scheme.AddValidationFunc((*M1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_M1(ctx, op, nil /* fldPath */, obj.(*M1), safe.Cast[*M1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*M1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_M1( + ctx, op, nil, /* fldPath */ + obj.(*M1), + safe.Cast[*M1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) // type T1 - scheme.AddValidationFunc((*T1)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_T1(ctx, op, nil /* fldPath */, obj.(*T1), safe.Cast[*T1](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*T1)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_T1( + ctx, op, nil, /* fldPath */ + obj.(*T1), + safe.Cast[*T1](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_M1 validates an instance of M1 according // to declarative validation rules in the API schema. -func Validate_M1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *M1) (errs field.ErrorList) { - // field M1.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_M1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *M1) (errs field.ErrorList) { + + { // field M1.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations - errs = append(errs, validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "M1.S")...) + if e := validate.FixedResult(ctx, op, fldPath, obj, oldObj, false, "M1.S"); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *M1) *string { return &oldObj.S }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *M1) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } return errs } // Validate_T1 validates an instance of T1 according // to declarative validation rules in the API schema. -func Validate_T1(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *T1) (errs field.ErrorList) { - // field T1.MSM1 - errs = append(errs, - func(fldPath *field.Path, obj, oldObj map[string]M1, oldValueCorrelated bool) (errs field.ErrorList) { +func Validate_T1( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *T1) (errs field.ErrorList) { + + { // field T1.MSM1 + fn := func( + fldPath *field.Path, + obj, oldObj map[string]M1, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && equality.Semantic.DeepEqual(obj, oldObj) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if equality.Semantic.DeepEqual(obj, oldObj) { + return nil + } } // iterate the map and call the value type's validation function - errs = append(errs, validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_M1)...) + if e := validate.EachMapVal(ctx, op, fldPath, obj, oldObj, validate.DirectEqual, Validate_M1); len(e) != 0 { + errs = append(errs, e...) + } return - }(fldPath.Child("msm1"), obj.MSM1, safe.Field(oldObj, func(oldObj *T1) map[string]M1 { return oldObj.MSM1 }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *T1) map[string]M1 { + return oldObj.MSM1 + }) + errs = append(errs, fn(fldPath.Child("msm1"), obj.MSM1, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitive_pointers/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitive_pointers/zz_generated.validations.go index d67280723b7..73afa94914f 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitive_pointers/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitive_pointers/zz_generated.validations.go @@ -38,44 +38,39 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - // field Struct.SP - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil - } - // call field-attached validations - earlyReturn := false - if e := validate.Immutable(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return // do not proceed - } - return - }(fldPath.Child("sp"), obj.SP, safe.Field(oldObj, func(oldObj *Struct) *string { return oldObj.SP }), oldObj != nil)...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { - // field Struct.IP - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.SP + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -87,14 +82,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("ip"), obj.IP, safe.Field(oldObj, func(oldObj *Struct) *int { return oldObj.IP }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return oldObj.SP + }) + errs = append(errs, fn(fldPath.Child("sp"), obj.SP, oldVal, oldObj != nil)...) + } - // field Struct.BP - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.IP + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -106,14 +111,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("bp"), obj.BP, safe.Field(oldObj, func(oldObj *Struct) *bool { return oldObj.BP }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return oldObj.IP + }) + errs = append(errs, fn(fldPath.Child("ip"), obj.IP, oldVal, oldObj != nil)...) + } - // field Struct.FP - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.BP + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -125,7 +140,42 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("fp"), obj.FP, safe.Field(oldObj, func(oldObj *Struct) *float64 { return oldObj.FP }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return oldObj.BP + }) + errs = append(errs, fn(fldPath.Child("bp"), obj.BP, oldVal, oldObj != nil)...) + } + + { // field Struct.FP + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } + } + // call field-attached validations + earlyReturn := false + if e := validate.Immutable(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return // do not proceed + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *float64 { + return oldObj.FP + }) + errs = append(errs, fn(fldPath.Child("fp"), obj.FP, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitives/zz_generated.validations.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitives/zz_generated.validations.go index 029e994e89b..2f7d12e754a 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitives/zz_generated.validations.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/output_tests/update_validations/primitives/zz_generated.validations.go @@ -38,44 +38,39 @@ func init() { localSchemeBuilder.Register(RegisterValidations) } // Public to allow building arbitrary schemes. func RegisterValidations(scheme *testscheme.Scheme) error { // type Struct - scheme.AddValidationFunc((*Struct)(nil), func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { - switch op.Request.SubresourcePath() { - case "/": - return Validate_Struct(ctx, op, nil /* fldPath */, obj.(*Struct), safe.Cast[*Struct](oldObj)) - } - return field.ErrorList{field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath()))} - }) + scheme.AddValidationFunc( + (*Struct)(nil), + func(ctx context.Context, op operation.Operation, obj, oldObj interface{}) field.ErrorList { + switch op.Request.SubresourcePath() { + case "/": + return Validate_Struct( + ctx, op, nil, /* fldPath */ + obj.(*Struct), + safe.Cast[*Struct](oldObj)) + } + return field.ErrorList{ + field.InternalError(nil, fmt.Errorf("no validation found for %T, subresource: %v", obj, op.Request.SubresourcePath())), + } + }) return nil } // Validate_Struct validates an instance of Struct according // to declarative validation rules in the API schema. -func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *Struct) (errs field.ErrorList) { - // field Struct.S - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *string, oldValueCorrelated bool) (errs field.ErrorList) { - // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil - } - // call field-attached validations - earlyReturn := false - if e := validate.Immutable(ctx, op, fldPath, obj, oldObj); len(e) != 0 { - errs = append(errs, e...) - earlyReturn = true - } - if earlyReturn { - return // do not proceed - } - return - }(fldPath.Child("s"), &obj.S, safe.Field(oldObj, func(oldObj *Struct) *string { return &oldObj.S }), oldObj != nil)...) +func Validate_Struct( + ctx context.Context, op operation.Operation, fldPath *field.Path, + obj, oldObj *Struct) (errs field.ErrorList) { - // field Struct.I - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *int, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.S + fn := func( + fldPath *field.Path, + obj, oldObj *string, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -87,14 +82,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("i"), &obj.I, safe.Field(oldObj, func(oldObj *Struct) *int { return &oldObj.I }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *string { + return &oldObj.S + }) + errs = append(errs, fn(fldPath.Child("s"), &obj.S, oldVal, oldObj != nil)...) + } - // field Struct.B - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *bool, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.I + fn := func( + fldPath *field.Path, + obj, oldObj *int, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -106,14 +111,24 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("b"), &obj.B, safe.Field(oldObj, func(oldObj *Struct) *bool { return &oldObj.B }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *int { + return &oldObj.I + }) + errs = append(errs, fn(fldPath.Child("i"), &obj.I, oldVal, oldObj != nil)...) + } - // field Struct.F - errs = append(errs, - func(fldPath *field.Path, obj, oldObj *float64, oldValueCorrelated bool) (errs field.ErrorList) { + { // field Struct.B + fn := func( + fldPath *field.Path, + obj, oldObj *bool, + oldValueCorrelated bool) (errs field.ErrorList) { // don't revalidate unchanged data - if oldValueCorrelated && op.Type == operation.Update && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) { - return nil + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } } // call field-attached validations earlyReturn := false @@ -125,7 +140,42 @@ func Validate_Struct(ctx context.Context, op operation.Operation, fldPath *field return // do not proceed } return - }(fldPath.Child("f"), &obj.F, safe.Field(oldObj, func(oldObj *Struct) *float64 { return &oldObj.F }), oldObj != nil)...) + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *bool { + return &oldObj.B + }) + errs = append(errs, fn(fldPath.Child("b"), &obj.B, oldVal, oldObj != nil)...) + } + + { // field Struct.F + fn := func( + fldPath *field.Path, + obj, oldObj *float64, + oldValueCorrelated bool) (errs field.ErrorList) { + // don't revalidate unchanged data + if oldValueCorrelated && op.Type == operation.Update { + if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) { + return nil + } + } + // call field-attached validations + earlyReturn := false + if e := validate.Immutable(ctx, op, fldPath, obj, oldObj); len(e) != 0 { + errs = append(errs, e...) + earlyReturn = true + } + if earlyReturn { + return // do not proceed + } + return + } + oldVal := safe.Field(oldObj, + func(oldObj *Struct) *float64 { + return &oldObj.F + }) + errs = append(errs, fn(fldPath.Child("f"), &obj.F, oldVal, oldObj != nil)...) + } return errs } diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go index ed2b19b3d6c..8ec1fcc0072 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go @@ -979,8 +979,8 @@ func (g *genValidations) emitRegisterFunction(c *generator.Context, schemeRegist // This uses a typed nil pointer, rather than a real instance because // we need the type information, but not an instance of the type. sw.Do("// type $.rootType|name$\n", targs) - sw.Do("scheme.AddValidationFunc(", targs) - sw.Do(" ($.typePfx$$.rootType|raw$)(nil), ", targs) + sw.Do("scheme.AddValidationFunc(\n", targs) + sw.Do(" ($.typePfx$$.rootType|raw$)(nil),\n", targs) sw.Do(" func(ctx $.context.Context$, op $.operation.Operation|raw$, obj, oldObj interface{}) $.field.ErrorList|raw$ {\n", targs) sw.Do("switch op.Request.SubresourcePath() {\n", nil) @@ -992,17 +992,17 @@ func (g *genValidations) emitRegisterFunction(c *generator.Context, schemeRegist sw.Do("$.$", s) } sw.Do(":\n", nil) - sw.Do(" return $.rootType|objectvalidationfn$(", targs) + sw.Do(" return $.rootType|objectvalidationfn$(\n", targs) sw.Do(" ctx, ", targs) sw.Do(" op, ", targs) - sw.Do(" nil /* fldPath */, ", targs) - sw.Do(" obj.($.typePfx$$.rootType|raw$), ", targs) + sw.Do(" nil /* fldPath */,\n", targs) + sw.Do(" obj.($.typePfx$$.rootType|raw$),\n", targs) sw.Do(" $.safe.Cast|raw$[$.typePfx$$.rootType|raw$](oldObj))\n", targs) sw.Do(" }\n", targs) - sw.Do(" return $.field.ErrorList|raw${", targs) + sw.Do(" return $.field.ErrorList|raw${\n", targs) sw.Do(" $.field.InternalError|raw$(", targs) sw.Do(" nil, ", targs) - sw.Do(" $.fmt.Errorf|raw$(\"no validation found for %T, subresource: %v\", obj, op.Request.SubresourcePath()))", targs) + sw.Do(" $.fmt.Errorf|raw$(\"no validation found for %T, subresource: %v\", obj, op.Request.SubresourcePath())),\n", targs) sw.Do(" }\n", targs) sw.Do("})\n", targs) } @@ -1050,12 +1050,12 @@ func (g *genValidations) emitValidationFunction(c *generator.Context, t *types.T } sw.Do("// $.inType|objectvalidationfn$ validates an instance of $.inType|name$ according\n", targs) sw.Do("// to declarative validation rules in the API schema.\n", targs) - sw.Do("func $.inType|objectvalidationfn$(", targs) + sw.Do("func $.inType|objectvalidationfn$(\n", targs) sw.Do(" ctx $.context.Context|raw$, ", targs) sw.Do(" op $.operation.Operation|raw$, ", targs) - sw.Do(" fldPath *$.field.Path|raw$, ", targs) + sw.Do(" fldPath *$.field.Path|raw$,\n", targs) sw.Do(" obj, oldObj $.objTypePfx$$.inType|raw$) ", targs) - sw.Do("(errs $.field.ErrorList|raw$) {\n", targs) + sw.Do("(errs $.field.ErrorList|raw$) {\n\n", targs) fakeChild := &childNode{ node: node, childType: t, @@ -1278,22 +1278,16 @@ func (g *genValidations) emitValidationForChild(c *generator.Context, thisChild if didSome { sw.Do("\n", nil) } - sw.Do("// field $.inType|raw$.$.fieldName$\n", targs) - sw.Do("errs = append(errs,\n", targs) - sw.Do(" func(fldPath *$.field.Path|raw$, obj, oldObj $.fieldTypePfx$$.fieldType|raw$, oldValueCorrelated bool) (errs $.field.ErrorList|raw$) {\n", targs) + sw.Do("{ // field $.inType|raw$.$.fieldName$\n", targs) + sw.Do(" fn := func(\n", targs) + sw.Do(" fldPath *$.field.Path|raw$,\n", targs) + sw.Do(" obj, oldObj $.fieldTypePfx$$.fieldType|raw$,\n", targs) + sw.Do(" oldValueCorrelated bool) (errs $.field.ErrorList|raw$) {\n", targs) if err := sw.Merge(buf, bufsw); err != nil { panic(fmt.Sprintf("failed to merge buffer: %v", err)) } - sw.Do(" return\n", targs) - sw.Do(" }(", targs) - if len(fld.jsonName) > 0 { - sw.Do("fldPath.Child(\"$.fieldJSON$\"), ", targs) - } else { - // If there is an embedded field in a root-type, fldPath - // will be nil, and we need SOMETHING for the field path. - sw.Do("$.safe.Value|raw$(fldPath, func() *$.field.Path|raw$ { return fldPath.Child(\"$.fieldType|raw$\") }), ", targs) - } - sw.Do(" $.fieldExprPfx$obj.$.fieldName$, ", targs) + sw.Do(" return\n", targs) + sw.Do(" }\n", targs) // safe.Field returns a nil if the old object does not have a correlatable // value, such as a map. // This is ambiguous with the case where the field exists and is nil. @@ -1312,11 +1306,20 @@ func (g *genValidations) emitValidationForChild(c *generator.Context, thisChild // This bit is not currently propagated down to deeper levels of // validation, but since the code generator only ever looks one level // down, this is sufficient for now. - sw.Do(" $.safe.Field|raw$(oldObj, ", targs) - sw.Do(" func(oldObj *$.inType|raw$) $.fieldTypePfx$$.fieldType|raw$ {", targs) - sw.Do(" return $.fieldExprPfx$oldObj.$.fieldName$", targs) - sw.Do(" }), oldObj != nil", targs) - sw.Do(" )...)\n", targs) + sw.Do(" oldVal := $.safe.Field|raw$(oldObj,\n", targs) + sw.Do(" func(oldObj *$.inType|raw$) $.fieldTypePfx$$.fieldType|raw$ {\n", targs) + sw.Do(" return $.fieldExprPfx$oldObj.$.fieldName$\n", targs) + sw.Do(" })\n", targs) + sw.Do(" errs = append(errs, fn(", targs) + if len(fld.jsonName) > 0 { + sw.Do("fldPath.Child(\"$.fieldJSON$\"), ", targs) + } else { + // If there is an embedded field in a root-type, fldPath + // will be nil, and we need SOMETHING for the field path. + sw.Do("$.safe.Value|raw$(fldPath, func() *$.field.Path|raw$ { return fldPath.Child(\"$.fieldType|raw$\") }), ", targs) + } + sw.Do(" $.fieldExprPfx$obj.$.fieldName$, oldVal, oldObj != nil)...)\n", targs) + sw.Do("}\n", targs) sw.Do("\n", nil) } else { targs := targs.WithArgs(generator.Args{ @@ -1352,6 +1355,7 @@ func emitRatchetingCheck(c *generator.Context, t *types.Type, sw *generator.Snip "operation": mkSymbolArgs(c, operationPkgSymbols), } sw.Do("// don't revalidate unchanged data\n", nil) + sw.Do("if oldValueCorrelated && op.Type == $.operation.Update|raw$ {\n", targs) // If the type is a builtin, we can use a simpler equality check when they are not nil. if util.IsDirectComparable(util.NonPointer(util.NativeType(t))) { // We should never get anything but pointers here, since every other @@ -1362,12 +1366,13 @@ func emitRatchetingCheck(c *generator.Context, t *types.Type, sw *generator.Snip // - obj != nil : handle optional fields which are updated to nil // - oldObj != nil : handle optional fields which are updated from nil // - *obj == *oldObj : compare values - sw.Do("if oldValueCorrelated && op.Type == $.operation.Update|raw$ && (obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj)) {\n", targs) + sw.Do(" if obj == oldObj || (obj != nil && oldObj != nil && *obj == *oldObj) {\n", targs) } else { targs["equality"] = mkSymbolArgs(c, equalityPkgSymbols) - sw.Do("if oldValueCorrelated && op.Type == $.operation.Update|raw$ && $.equality.Semantic|raw$.DeepEqual(obj, oldObj) {\n", targs) + sw.Do(" if $.equality.Semantic|raw$.DeepEqual(obj, oldObj) {\n", targs) } - sw.Do(" return nil\n", nil) + sw.Do(" return nil\n", nil) + sw.Do(" }\n", nil) sw.Do("}\n", nil) } @@ -1391,7 +1396,7 @@ func emitCallsToValidators(c *generator.Context, validations []validators.Functi for _, validations := range cohorts { cohortName := validations[0].Cohort if cohortName != "" { - sw.Do("func() { // cohort $.$\n", cohortName) + sw.Do("func() { // cohort = \"$.$\"\n", cohortName) } hasShortCircuits := false @@ -1431,7 +1436,7 @@ func emitCallsToValidators(c *generator.Context, validations []validators.Functi sw.Do("(ctx, op, fldPath, obj, oldObj", targs) for _, arg := range v.Args { sw.Do(", ", nil) - toGolangSourceDataLiteral(sw, c, arg) + toGolangSourceDataLiteral(sw, c, arg, flNewlineOK) } sw.Do(")", targs) switch v.StabilityLevel { @@ -1493,9 +1498,11 @@ func emitCallsToValidators(c *generator.Context, validations []validators.Functi if isNonError { emitCall() } else { - sw.Do("errs = append(errs, ", nil) + sw.Do("if e := ", nil) emitCall() - sw.Do("...)\n", nil) + sw.Do("; len(e) != 0 {\n", nil) + sw.Do(" errs = append(errs, e...)\n", nil) + sw.Do("}\n", nil) } } } @@ -1583,7 +1590,7 @@ func (g *genValidations) emitValidationVariables(c *generator.Context, t *types. } sw.Do("var $.varName|private$ = ", targs) - toGolangSourceDataLiteral(sw, c, variable.Initializer) + toGolangSourceDataLiteral(sw, c, variable.Initializer, flNewlineOK) sw.Do("\n", nil) } } @@ -1597,7 +1604,20 @@ func (g *genValidations) emitValidationVariables(c *generator.Context, t *types. } } -func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context, value any) { +const ( + // flNewlineOK is a flag indicating that it's acceptable to emit newlines + // when rendering a value. This is used for complex literals which may be + // more readable with newlines, but should not be used for simple literals + // where newlines would be undesirable. + flNewlineOK uint64 = 1 << iota +) + +// toGolangSourceDataLiteral renders the given value as a Go literal in the +// generated source code. The value is expected to be one of a limited set of +// types (e.g. basic types, types.Type, validators.Identifier, etc.) which are +// commonly used as arguments to validation functions. The flags parameter can +// be used to control certain aspects of the rendering. +func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context, value any, flags uint64) { // For safety, be strict in what values we output to visited source, and ensure strings // are quoted. @@ -1651,6 +1671,9 @@ func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context targs["objTypePfx"] = "" } + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } sw.Do("func(", targs) sw.Do(" ctx $.context.Context|raw$, ", targs) sw.Do(" op $.operation.Operation|raw$, ", targs) @@ -1675,6 +1698,9 @@ func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context targs["objTypePfx"] = "" } + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } sw.Do("func(", targs) sw.Do(" ctx $.context.Context|raw$, ", targs) sw.Do(" op $.operation.Operation|raw$, ", targs) @@ -1736,6 +1762,9 @@ func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context } emitFunctionCall(sw, c, v) case validators.FunctionLiteral: + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } sw.Do("func(", nil) for i, param := range v.Parameters { if i > 0 { @@ -1769,6 +1798,9 @@ func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context targs := generator.Args{ "type": c.Universe.Type(v.Type), } + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } sw.Do("$.type|raw$", targs) if len(v.TypeArgs) > 0 { sw.Do("[", nil) @@ -1780,15 +1812,24 @@ func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context } sw.Do("]", nil) } - sw.Do("{\n", nil) + sw.Do("{", nil) + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } for _, f := range v.Fields { sw.Do(f.Name, nil) sw.Do(": ", nil) - toGolangSourceDataLiteral(sw, c, f.Value) - sw.Do(", ", nil) + toGolangSourceDataLiteral(sw, c, f.Value, flags) + sw.Do(",", nil) + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } } sw.Do("}", targs) case validators.SliceLiteral: + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } sw.Do("[]", nil) targs := generator.Args{ "type": c.Universe.Type(v.ElementType), @@ -1804,10 +1845,21 @@ func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context } sw.Do("]", nil) } - sw.Do("{\n", nil) + sw.Do("{", nil) + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } for _, e := range v.Elements { - toGolangSourceDataLiteral(sw, c, e) - sw.Do(",\n", nil) + // TODO: slice-of-struct ends up with extra newlines because we + // emit one after `{` and `,` plus one before a struct. We + // should track "isNewLine" in sw, and instead of unconditionally + // adding a newline after each element, call sw.NewLine() which + // only adds a newline if the previous write did not end with one. + toGolangSourceDataLiteral(sw, c, e, flags) + sw.Do(",", nil) + if flags&flNewlineOK != 0 { + sw.Do("\n", nil) + } } sw.Do("}", nil) default: @@ -1829,7 +1881,7 @@ func toGolangSourceDataLiteral(sw *generator.SnippetWriter, c *generator.Context sw.Do("[$.arraySize$]$.itemType${", map[string]string{"arraySize": arraySize, "itemType": itemType}) for i := range rv.Len() { val := rv.Index(i) - toGolangSourceDataLiteral(sw, c, val.Interface()) + toGolangSourceDataLiteral(sw, c, val.Interface(), flags) if i < rv.Len()-1 { sw.Do(", ", nil) } @@ -1868,7 +1920,7 @@ func emitFunctionCall(sw *generator.SnippetWriter, c *generator.Context, v valid if i != 0 { sw.Do(", ", nil) } - toGolangSourceDataLiteral(sw, c, arg) + toGolangSourceDataLiteral(sw, c, arg, flNewlineOK) } sw.Do(")", nil) switch v.StabilityLevel {