-
Notifications
You must be signed in to change notification settings - Fork 1
/
validator_utils.go
155 lines (145 loc) · 4.64 KB
/
validator_utils.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package validation
import (
"context"
"github.com/tiendc/go-validator/base"
)
// call1 generics function to execute a validation function with 1 param
func call1[P any](
errType, valueType string,
validateFunc func(P) (bool, []base.ErrorParam),
) func(v P) SingleValidator {
return func(v P) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
success, params := validateFunc(v)
if success {
return nil
}
return errorBuild(errType, valueType, v, nil, params...)
})
}
}
// call2 generics function to execute a validation function with 2 params
func call2[P1 any, P2 any](
errType, valueType string, p2Name string,
validateFunc func(P1, P2) (bool, []base.ErrorParam),
) func(P1, P2) SingleValidator {
return func(v P1, p2 P2) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
success, params := validateFunc(v, p2)
if success {
return nil
}
params = append(params, base.ErrorParam{Key: p2Name, Value: p2})
return errorBuild(errType, valueType, v, nil, params...)
})
}
}
// call2N generics function to execute a validation function with 1 fixed param and a variable param
func call2N[P1 any, P2 any](
errType, valueType string, p2Name string,
validateFunc func(P1, ...P2) (bool, []base.ErrorParam),
) func(P1, ...P2) SingleValidator {
return func(v P1, p2s ...P2) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
success, params := validateFunc(v, p2s...)
if success {
return nil
}
params = append(params, base.ErrorParam{Key: p2Name, Value: p2s})
return errorBuild(errType, valueType, v, nil, params...)
})
}
}
// call3 generics function to execute a validation function with 3 params
func call3[P1 any, P2 any, P3 any](
errType, valueType string, p2Name, p3Name string,
validateFunc func(P1, P2, P3) (bool, []base.ErrorParam),
) func(P1, P2, P3) SingleValidator {
return func(v P1, p2 P2, p3 P3) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
success, params := validateFunc(v, p2, p3)
if success {
return nil
}
params = append(params, base.ErrorParam{Key: p2Name, Value: p2},
base.ErrorParam{Key: p3Name, Value: p3})
return errorBuild(errType, valueType, v, nil, params...)
})
}
}
// ptrCall1 generics function to execute a validation function with 1 pointer param
func ptrCall1[P any](
errType, valueType string,
validateFunc func(P) (bool, []base.ErrorParam),
) func(v *P) SingleValidator {
return func(v *P) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
if v == nil {
return nil
}
success, params := validateFunc(*v)
if success {
return nil
}
return errorBuild(errType, valueType, *v, nil, params...)
})
}
}
// ptrCall2 generics function to execute a validation function with 2 pointer params
func ptrCall2[P1 any, P2 any](
errType, valueType string, p2Name string,
validateFunc func(P1, P2) (bool, []base.ErrorParam),
) func(*P1, P2) SingleValidator {
return func(v *P1, p2 P2) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
if v == nil {
return nil
}
success, params := validateFunc(*v, p2)
if success {
return nil
}
params = append(params, base.ErrorParam{Key: p2Name, Value: p2})
return errorBuild(errType, valueType, *v, nil, params...)
})
}
}
// ptrCall2N generics function to execute a validation function with 1 fixed param and a variable param
func ptrCall2N[P1 any, P2 any](
errType, valueType string, p2Name string,
validateFunc func(P1, ...P2) (bool, []base.ErrorParam),
) func(*P1, ...P2) SingleValidator {
return func(v *P1, p2s ...P2) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
if v == nil {
return nil
}
success, params := validateFunc(*v, p2s...)
if success {
return nil
}
params = append(params, base.ErrorParam{Key: p2Name, Value: p2s})
return errorBuild(errType, valueType, *v, nil, params...)
})
}
}
// ptrCall3 generics function to execute a validation function with 3 pointer params
func ptrCall3[P1 any, P2 any, P3 any](
errType, valueType string, p2Name, p3Name string,
validateFunc func(P1, P2, P3) (bool, []base.ErrorParam),
) func(*P1, P2, P3) SingleValidator {
return func(v *P1, p2 P2, p3 P3) SingleValidator {
return NewSingleValidator(func(ctx context.Context) Error {
if v == nil {
return nil
}
success, params := validateFunc(*v, p2, p3)
if success {
return nil
}
params = append(params, base.ErrorParam{Key: p2Name, Value: p2},
base.ErrorParam{Key: p3Name, Value: p3})
return errorBuild(errType, valueType, *v, nil, params...)
})
}
}