default type check 'int' does not use 'reflect' anymore

This commit is contained in:
Adrien Marquès 2018-10-02 11:46:18 +02:00
parent f9a928c181
commit 50de7a4297
1 changed files with 8 additions and 20 deletions

View File

@ -2,27 +2,12 @@ package main
import ( import (
"git.xdrm.io/go/aicra/driver" "git.xdrm.io/go/aicra/driver"
"reflect" "math"
) )
func main() {} func main() {}
func Export() driver.Checker { return new(IntChecker) } func Export() driver.Checker { return new(IntChecker) }
var validationTable = map[reflect.Kind]interface{}{
reflect.Float32: nil,
reflect.Float64: nil,
reflect.Int: nil,
reflect.Int8: nil,
reflect.Int16: nil,
reflect.Int32: nil,
reflect.Int64: nil,
reflect.Uint: nil,
reflect.Uint8: nil,
reflect.Uint16: nil,
reflect.Uint32: nil,
reflect.Uint64: nil,
}
type IntChecker int type IntChecker int
// Match matches the string 'int' // Match matches the string 'int'
@ -33,10 +18,13 @@ func (ick IntChecker) Match(name string) bool {
// Check returns true for any type from the @validationTable // Check returns true for any type from the @validationTable
func (ick IntChecker) Check(value interface{}) bool { func (ick IntChecker) Check(value interface{}) bool {
kind := reflect.TypeOf(value).Kind() // check if float (default wrapping type)
floatVal, ok := value.(float64)
if !ok {
return false
}
_, isTypeValid := validationTable[kind] // check if there is no floating point
return floatVal == math.Floor(floatVal)
return isTypeValid
} }