Jelajahi Sumber

Fix for #310

Manu Mtz-Almeida 10 tahun lalu
induk
melakukan
9584e4ea5c
2 mengubah file dengan 29 tambahan dan 0 penghapusan
  1. 13 0
      binding/binding.go
  2. 16 0
      binding/validate_test.go

+ 13 - 0
binding/binding.go

@@ -6,6 +6,7 @@ package binding
 
 
 import (
 import (
 	"net/http"
 	"net/http"
+	"reflect"
 
 
 	"gopkg.in/bluesuncorp/validator.v5"
 	"gopkg.in/bluesuncorp/validator.v5"
 )
 )
@@ -56,8 +57,20 @@ func ValidateField(f interface{}, tag string) error {
 }
 }
 
 
 func Validate(obj interface{}) error {
 func Validate(obj interface{}) error {
+	if kindOfData(obj) != reflect.Struct {
+		return nil
+	}
 	if err := validate.Struct(obj); err != nil {
 	if err := validate.Struct(obj); err != nil {
 		return error(err)
 		return error(err)
 	}
 	}
 	return nil
 	return nil
 }
 }
+
+func kindOfData(data interface{}) reflect.Kind {
+	value := reflect.ValueOf(data)
+	valueType := value.Kind()
+	if valueType == reflect.Ptr {
+		valueType = value.Elem().Kind()
+	}
+	return valueType
+}

+ 16 - 0
binding/validate_test.go

@@ -51,3 +51,19 @@ func TestValidateGoodObject(t *testing.T) {
 	test := createStruct()
 	test := createStruct()
 	assert.Nil(t, Validate(&test))
 	assert.Nil(t, Validate(&test))
 }
 }
+
+type Object map[string]interface{}
+type MyObjects []Object
+
+func TestValidateSlice(t *testing.T) {
+	var obj MyObjects
+	var obj2 Object
+	var nu = 10
+
+	assert.NoError(t, Validate(obj))
+	assert.NoError(t, Validate(&obj))
+	assert.NoError(t, Validate(obj2))
+	assert.NoError(t, Validate(&obj2))
+	assert.NoError(t, Validate(nu))
+	assert.NoError(t, Validate(&nu))
+}