mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 14:20:54 +00:00
Fix break API change
support int64 on 64-bit platform
This commit is contained in:
parent
2231841d74
commit
6e34f43721
@ -25,6 +25,8 @@ import (
|
|||||||
const (
|
const (
|
||||||
// ValidTag struct tag
|
// ValidTag struct tag
|
||||||
ValidTag = "valid"
|
ValidTag = "valid"
|
||||||
|
|
||||||
|
wordsize = 32 << (^uint(0) >> 32 & 1)
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -43,6 +45,8 @@ var (
|
|||||||
"Valid": true,
|
"Valid": true,
|
||||||
"NoMatch": true,
|
"NoMatch": true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Int64On32Err = fmt.Errorf("not support int64 on 32-bit platform")
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -250,6 +254,9 @@ func parseParam(t reflect.Type, s string) (i interface{}, err error) {
|
|||||||
case reflect.Int:
|
case reflect.Int:
|
||||||
i, err = strconv.Atoi(s)
|
i, err = strconv.Atoi(s)
|
||||||
case reflect.Int64:
|
case reflect.Int64:
|
||||||
|
if wordsize == 32 {
|
||||||
|
return nil, Int64On32Err
|
||||||
|
}
|
||||||
i, err = strconv.ParseInt(s, 10, 64)
|
i, err = strconv.ParseInt(s, 10, 64)
|
||||||
case reflect.Int32:
|
case reflect.Int32:
|
||||||
var v int64
|
var v int64
|
||||||
@ -273,12 +280,12 @@ func parseParam(t reflect.Type, s string) (i interface{}, err error) {
|
|||||||
i = s
|
i = s
|
||||||
case reflect.Ptr:
|
case reflect.Ptr:
|
||||||
if t.Elem().String() != "regexp.Regexp" {
|
if t.Elem().String() != "regexp.Regexp" {
|
||||||
err = fmt.Errorf("does not support %s", t.Elem().String())
|
err = fmt.Errorf("not support %s", t.Elem().String())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
i, err = regexp.Compile(s)
|
i, err = regexp.Compile(s)
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("does not support %s", t.Kind().String())
|
err = fmt.Errorf("not support %s", t.Kind().String())
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -144,17 +144,17 @@ func (v *Validation) Required(obj interface{}, key string) *Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Min Test that the obj is greater than min if obj's type is int
|
// Min Test that the obj is greater than min if obj's type is int
|
||||||
func (v *Validation) Min(obj interface{}, min int64, key string) *Result {
|
func (v *Validation) Min(obj interface{}, min int, key string) *Result {
|
||||||
return v.apply(Min{min, key}, obj)
|
return v.apply(Min{min, key}, obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Max Test that the obj is less than max if obj's type is int
|
// Max Test that the obj is less than max if obj's type is int
|
||||||
func (v *Validation) Max(obj interface{}, max int64, key string) *Result {
|
func (v *Validation) Max(obj interface{}, max int, key string) *Result {
|
||||||
return v.apply(Max{max, key}, obj)
|
return v.apply(Max{max, key}, obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Range Test that the obj is between mni and max if obj's type is int
|
// Range Test that the obj is between mni and max if obj's type is int
|
||||||
func (v *Validation) Range(obj interface{}, min, max int64, key string) *Result {
|
func (v *Validation) Range(obj interface{}, min, max int, key string) *Result {
|
||||||
return v.apply(Range{Min{Min: min}, Max{Max: max}, key}, obj)
|
return v.apply(Range{Min{Min: min}, Max{Max: max}, key}, obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,10 +64,10 @@ func TestRequired(t *testing.T) {
|
|||||||
func TestMin(t *testing.T) {
|
func TestMin(t *testing.T) {
|
||||||
valid := Validation{}
|
valid := Validation{}
|
||||||
|
|
||||||
if valid.Min(int64(-1), int64(0), "min0").Ok {
|
if valid.Min(-1, 0, "min0").Ok {
|
||||||
t.Error("-1 is less than the minimum value of 0 should be false")
|
t.Error("-1 is less than the minimum value of 0 should be false")
|
||||||
}
|
}
|
||||||
if !valid.Min(int64(1), int64(0), "min0").Ok {
|
if !valid.Min(1, 0, "min0").Ok {
|
||||||
t.Error("1 is greater or equal than the minimum value of 0 should be true")
|
t.Error("1 is greater or equal than the minimum value of 0 should be true")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -75,10 +75,10 @@ func TestMin(t *testing.T) {
|
|||||||
func TestMax(t *testing.T) {
|
func TestMax(t *testing.T) {
|
||||||
valid := Validation{}
|
valid := Validation{}
|
||||||
|
|
||||||
if valid.Max(int64(1), int64(0), "max0").Ok {
|
if valid.Max(1, 0, "max0").Ok {
|
||||||
t.Error("1 is greater than the minimum value of 0 should be false")
|
t.Error("1 is greater than the minimum value of 0 should be false")
|
||||||
}
|
}
|
||||||
if !valid.Max(int64(-1), int64(0), "max0").Ok {
|
if !valid.Max(-1, 0, "max0").Ok {
|
||||||
t.Error("-1 is less or equal than the maximum value of 0 should be true")
|
t.Error("-1 is less or equal than the maximum value of 0 should be true")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,24 +161,28 @@ func (r Required) GetLimitValue() interface{} {
|
|||||||
|
|
||||||
// Min check struct
|
// Min check struct
|
||||||
type Min struct {
|
type Min struct {
|
||||||
Min int64
|
Min int
|
||||||
Key string
|
Key string
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsSatisfied judge whether obj is valid
|
// IsSatisfied judge whether obj is valid
|
||||||
|
// not support int64 on 32-bit platform
|
||||||
func (m Min) IsSatisfied(obj interface{}) bool {
|
func (m Min) IsSatisfied(obj interface{}) bool {
|
||||||
var v int64
|
var v int
|
||||||
switch obj.(type) {
|
switch obj.(type) {
|
||||||
case int64:
|
case int64:
|
||||||
v = obj.(int64)
|
if wordsize == 32 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
v = int(obj.(int64))
|
||||||
case int:
|
case int:
|
||||||
v = int64(obj.(int))
|
v = obj.(int)
|
||||||
case int32:
|
case int32:
|
||||||
v = int64(obj.(int32))
|
v = int(obj.(int32))
|
||||||
case int16:
|
case int16:
|
||||||
v = int64(obj.(int16))
|
v = int(obj.(int16))
|
||||||
case int8:
|
case int8:
|
||||||
v = int64(obj.(int8))
|
v = int(obj.(int8))
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -203,24 +207,28 @@ func (m Min) GetLimitValue() interface{} {
|
|||||||
|
|
||||||
// Max validate struct
|
// Max validate struct
|
||||||
type Max struct {
|
type Max struct {
|
||||||
Max int64
|
Max int
|
||||||
Key string
|
Key string
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsSatisfied judge whether obj is valid
|
// IsSatisfied judge whether obj is valid
|
||||||
|
// not support int64 on 32-bit platform
|
||||||
func (m Max) IsSatisfied(obj interface{}) bool {
|
func (m Max) IsSatisfied(obj interface{}) bool {
|
||||||
var v int64
|
var v int
|
||||||
switch obj.(type) {
|
switch obj.(type) {
|
||||||
case int64:
|
case int64:
|
||||||
v = obj.(int64)
|
if wordsize == 32 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
v = int(obj.(int64))
|
||||||
case int:
|
case int:
|
||||||
v = int64(obj.(int))
|
v = obj.(int)
|
||||||
case int32:
|
case int32:
|
||||||
v = int64(obj.(int32))
|
v = int(obj.(int32))
|
||||||
case int16:
|
case int16:
|
||||||
v = int64(obj.(int16))
|
v = int(obj.(int16))
|
||||||
case int8:
|
case int8:
|
||||||
v = int64(obj.(int8))
|
v = int(obj.(int8))
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -251,6 +259,7 @@ type Range struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IsSatisfied judge whether obj is valid
|
// IsSatisfied judge whether obj is valid
|
||||||
|
// not support int64 on 32-bit platform
|
||||||
func (r Range) IsSatisfied(obj interface{}) bool {
|
func (r Range) IsSatisfied(obj interface{}) bool {
|
||||||
return r.Min.IsSatisfied(obj) && r.Max.IsSatisfied(obj)
|
return r.Min.IsSatisfied(obj) && r.Max.IsSatisfied(obj)
|
||||||
}
|
}
|
||||||
@ -267,7 +276,7 @@ func (r Range) GetKey() string {
|
|||||||
|
|
||||||
// GetLimitValue return the limit value, Max
|
// GetLimitValue return the limit value, Max
|
||||||
func (r Range) GetLimitValue() interface{} {
|
func (r Range) GetLimitValue() interface{} {
|
||||||
return []int64{r.Min.Min, r.Max.Max}
|
return []int{r.Min.Min, r.Max.Max}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MinSize Requires an array or string to be at least a given length.
|
// MinSize Requires an array or string to be at least a given length.
|
||||||
|
Loading…
Reference in New Issue
Block a user