updated vendor
This commit is contained in:
+15
-4
@@ -19,6 +19,7 @@ package validate
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/operation"
|
||||
@@ -60,6 +61,10 @@ type UnionValidationOptions struct {
|
||||
// )...)
|
||||
// return errs
|
||||
// }
|
||||
//
|
||||
// Note that T is "any", rather than "comparable", because union-members can be
|
||||
// slices, meaning T might be a struct with a slice, meaning it is not
|
||||
// comparable.
|
||||
func Union[T any](_ context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj T, union *UnionMembership, isSetFns ...ExtractorFn[T, bool]) field.ErrorList {
|
||||
options := UnionValidationOptions{
|
||||
ErrorForEmpty: func(fldPath *field.Path, allFields []string) *field.Error {
|
||||
@@ -72,7 +77,7 @@ func Union[T any](_ context.Context, op operation.Operation, fldPath *field.Path
|
||||
},
|
||||
}
|
||||
|
||||
return unionValidate(op, fldPath, obj, oldObj, union, options, isSetFns...)
|
||||
return unionValidate(op, fldPath, obj, oldObj, union, options, isSetFns...).WithOrigin("union")
|
||||
}
|
||||
|
||||
// DiscriminatedUnion verifies specified union member matches the discriminator.
|
||||
@@ -98,6 +103,10 @@ func Union[T any](_ context.Context, op operation.Operation, fldPath *field.Path
|
||||
//
|
||||
// It is not an error for the discriminatorValue to be unknown. That must be
|
||||
// validated on its own.
|
||||
//
|
||||
// Note that T is "any", rather than "comparable", because union-members can be
|
||||
// slices, meaning T might be a struct with a slice, meaning it is not
|
||||
// comparable.
|
||||
func DiscriminatedUnion[T any, D ~string](_ context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj T, union *UnionMembership, discriminatorExtractor ExtractorFn[T, D], isSetFns ...ExtractorFn[T, bool]) (errs field.ErrorList) {
|
||||
if len(union.members) != len(isSetFns) {
|
||||
return field.ErrorList{
|
||||
@@ -106,6 +115,7 @@ func DiscriminatedUnion[T any, D ~string](_ context.Context, op operation.Operat
|
||||
len(isSetFns), len(union.members))),
|
||||
}
|
||||
}
|
||||
hasOldValue := !reflect.ValueOf(oldObj).IsZero() // because T is any, rather than comparable
|
||||
var changed bool
|
||||
discriminatorValue := discriminatorExtractor(obj)
|
||||
if op.Type == operation.Update {
|
||||
@@ -131,10 +141,10 @@ func DiscriminatedUnion[T any, D ~string](_ context.Context, op operation.Operat
|
||||
}
|
||||
// If the union discriminator and membership is unchanged, we don't need to
|
||||
// re-validate.
|
||||
if op.Type == operation.Update && !changed {
|
||||
if op.Type == operation.Update && hasOldValue && !changed {
|
||||
return nil
|
||||
}
|
||||
return errs
|
||||
return errs.WithOrigin("union")
|
||||
}
|
||||
|
||||
// UnionMember represents a member of a union.
|
||||
@@ -195,6 +205,7 @@ func unionValidate[T any](op operation.Operation, fldPath *field.Path,
|
||||
}
|
||||
}
|
||||
|
||||
hasOldValue := !reflect.ValueOf(oldObj).IsZero() // because T is any, rather than comparable
|
||||
var specifiedFields []string
|
||||
var changed bool
|
||||
for i, fieldIsSet := range isSetFns {
|
||||
@@ -209,7 +220,7 @@ func unionValidate[T any](op operation.Operation, fldPath *field.Path,
|
||||
}
|
||||
|
||||
// If the union membership is unchanged, we don't need to re-validate.
|
||||
if op.Type == operation.Update && !changed {
|
||||
if op.Type == operation.Update && hasOldValue && !changed {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user