-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
validator.go
59 lines (46 loc) · 1.6 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
package validator
import (
ut "github.com/go-playground/universal-translator"
validator2 "github.com/go-playground/validator/v10"
"reflect"
)
type Validator struct {
validate *validator2.Validate
trans ut.Translator
}
func New(validate *validator2.Validate, trans ut.Translator) *Validator {
validate.RegisterTagNameFunc(func(field reflect.StructField) string {
return field.Tag.Get(`alias`)
})
return &Validator{
validate: validate,
trans: trans,
}
}
func (v *Validator) RegisterTranslation(tag string, registerFn validator2.RegisterTranslationsFunc, translationFn validator2.TranslationFunc) error {
return v.validate.RegisterTranslation(tag, v.trans, registerFn, translationFn)
}
func (v *Validator) RegisterValidation(tag string, validationFunc validator2.Func) error {
return v.validate.RegisterValidation(tag, validationFunc)
}
func (v *Validator) RegisterTranslationValidation(tag string, validationFunc validator2.Func, registerFn validator2.RegisterTranslationsFunc, translationFn validator2.TranslationFunc) error {
if err := v.RegisterValidation(tag, validationFunc); err != nil {
return err
}
return v.RegisterTranslation(tag, registerFn, translationFn)
}
func (v *Validator) Validate(val interface{}) error {
err := v.validate.Struct(val)
if e, ok := err.(validator2.ValidationErrors); ok {
var errors = make([]*MessageStruct, 0)
for _, ve := range e {
errors = append(errors, &MessageStruct{
Key: ve.StructField(),
Message: ve.Translate(v.trans),
Namespace: ve.StructNamespace(),
})
}
return Error("validation error", errors)
}
return err
}