You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
867 B
45 lines
867 B
package binding |
|
|
|
import ( |
|
"reflect" |
|
"sync" |
|
|
|
"gopkg.in/go-playground/validator.v9" |
|
) |
|
|
|
type defaultValidator struct { |
|
once sync.Once |
|
validate *validator.Validate |
|
} |
|
|
|
var _ StructValidator = &defaultValidator{} |
|
|
|
func (v *defaultValidator) ValidateStruct(obj interface{}) error { |
|
if kindOfData(obj) == reflect.Struct { |
|
v.lazyinit() |
|
if err := v.validate.Struct(obj); err != nil { |
|
return err |
|
} |
|
} |
|
return nil |
|
} |
|
|
|
func (v *defaultValidator) RegisterValidation(key string, fn validator.Func) error { |
|
v.lazyinit() |
|
return v.validate.RegisterValidation(key, fn) |
|
} |
|
|
|
func (v *defaultValidator) lazyinit() { |
|
v.once.Do(func() { |
|
v.validate = validator.New() |
|
}) |
|
} |
|
|
|
func kindOfData(data interface{}) reflect.Kind { |
|
value := reflect.ValueOf(data) |
|
valueType := value.Kind() |
|
if valueType == reflect.Ptr { |
|
valueType = value.Elem().Kind() |
|
} |
|
return valueType |
|
}
|
|
|