-
Notifications
You must be signed in to change notification settings - Fork 17
/
field_validation.go
67 lines (54 loc) · 1.46 KB
/
field_validation.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package v1alpha1
import (
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/validation/field"
"sigs.k8s.io/controller-runtime/pkg/client"
kerrors "k8s.io/apimachinery/pkg/api/errors"
)
type fieldValidator struct {
errs field.ErrorList
object client.Object
}
func NewFieldValidator(o client.Object) fieldValidator {
return fieldValidator{
object: o,
}
}
func (v *fieldValidator) Err() error {
if len(v.errs) != 0 {
g := v.object.GetObjectKind().GroupVersionKind()
return kerrors.NewInvalid(
schema.GroupKind{
Group: g.Group,
Kind: g.Kind,
},
v.object.GetName(),
field.ErrorList(v.errs),
)
}
return nil
}
func (v *fieldValidator) add(err ...*field.Error) {
v.errs = append(v.errs, err...)
}
func (v *fieldValidator) Forbidden(p *field.Path, detail string) {
v.add(field.Forbidden(p, detail))
}
func (v *fieldValidator) Invalid(p *field.Path, value interface{}, detail string) {
v.add(field.Invalid(p, value, detail))
}
func (v *fieldValidator) NotFound(p *field.Path, value interface{}) {
v.add(field.NotFound(p, value))
}
func (v *fieldValidator) Required(p *field.Path, detail string) {
v.add(field.Required(p, detail))
}
func (v *fieldValidator) Duplicate(p *field.Path, value interface{}) {
v.add(field.Duplicate(p, value))
}
func (v *fieldValidator) InternalError(p *field.Path, err error) {
v.add(field.InternalError(p, err))
}
func Path(n string, m ...string) *field.Path {
return field.NewPath(n, m...)
}