-
Notifications
You must be signed in to change notification settings - Fork 2
/
validator.go
62 lines (48 loc) · 1.13 KB
/
validator.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
package validation
import (
"net/url"
httpvalidate "github.com/oarkflow/framework/contracts/validation"
"github.com/gookit/validate"
)
func init() {
validate.Config(func(opt *validate.GlobalOption) {
opt.StopOnError = true
opt.SkipOnEmpty = false
})
}
type Validator struct {
instance *validate.Validation
data validate.DataFace
}
func NewValidator(instance *validate.Validation, data validate.DataFace) *Validator {
instance.Validate()
return &Validator{instance: instance, data: data}
}
func (v *Validator) Bind(ptr any) error {
var data any
if _, ok := v.data.Src().(url.Values); ok {
values := make(map[string]string)
for key, value := range v.data.Src().(url.Values) {
if len(value) > 0 {
values[key] = value[0]
}
}
data = values
} else {
data = v.data.Src()
}
bts, err := validate.Marshal(data)
if err != nil {
return err
}
return validate.Unmarshal(bts, ptr)
}
func (v *Validator) Errors() httpvalidate.Errors {
if v.instance.Errors == nil || len(v.instance.Errors) == 0 {
return nil
}
return NewErrors(v.instance.Errors)
}
func (v *Validator) Fails() bool {
return v.instance.IsFail()
}