default_validator.go 719 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package binding
  2. import (
  3. "reflect"
  4. "sync"
  5. "gopkg.in/bluesuncorp/validator.v5"
  6. )
  7. type defaultValidator struct {
  8. once sync.Once
  9. validate *validator.Validate
  10. }
  11. var _ StructValidator = &defaultValidator{}
  12. func (v *defaultValidator) ValidateStruct(obj interface{}) error {
  13. if kindOfData(obj) == reflect.Struct {
  14. v.lazyinit()
  15. return v.validate.Struct(obj)
  16. }
  17. return nil
  18. }
  19. func (v *defaultValidator) lazyinit() {
  20. v.once.Do(func() {
  21. v.validate = validator.New("binding", validator.BakedInValidators)
  22. })
  23. }
  24. func kindOfData(data interface{}) reflect.Kind {
  25. value := reflect.ValueOf(data)
  26. valueType := value.Kind()
  27. if valueType == reflect.Ptr {
  28. valueType = value.Elem().Kind()
  29. }
  30. return valueType
  31. }