mirror of
				https://github.com/gin-gonic/gin.git
				synced 2025-11-04 09:12:12 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			949 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			949 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2017 Manu Martinez-Almeida.  All rights reserved.
 | 
						|
// Use of this source code is governed by a MIT style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package binding
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
	"sync"
 | 
						|
 | 
						|
	"gopkg.in/go-playground/validator.v8"
 | 
						|
)
 | 
						|
 | 
						|
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 error(err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (v *defaultValidator) lazyinit() {
 | 
						|
	v.once.Do(func() {
 | 
						|
		config := &validator.Config{TagName: "binding"}
 | 
						|
		v.validate = validator.New(config)
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
func kindOfData(data interface{}) reflect.Kind {
 | 
						|
	value := reflect.ValueOf(data)
 | 
						|
	valueType := value.Kind()
 | 
						|
	if valueType == reflect.Ptr {
 | 
						|
		valueType = value.Elem().Kind()
 | 
						|
	}
 | 
						|
	return valueType
 | 
						|
}
 |