2018-10-16 20:18:39 +02:00
|
|
|
package validate
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
|
|
|
"regexp"
|
|
|
|
"strconv"
|
|
|
|
)
|
|
|
|
|
2019-04-26 10:33:41 +02:00
|
|
|
// InputFunc is a function that converts the parameter of a validation rule to the desired type
|
|
|
|
type InputFunc func(reflect.Kind, string) interface{}
|
|
|
|
|
|
|
|
// InputInt always returns an int
|
|
|
|
func InputInt(kind reflect.Kind, value string) interface{} {
|
|
|
|
return int(InputSame(reflect.Int, value).(int64))
|
2018-10-16 20:18:39 +02:00
|
|
|
}
|
|
|
|
|
2019-04-26 10:33:41 +02:00
|
|
|
// InputRegexp always returns a compiled regular expression
|
|
|
|
func InputRegexp(kind reflect.Kind, value string) interface{} {
|
2018-10-16 20:18:39 +02:00
|
|
|
return regexp.MustCompile(value)
|
|
|
|
}
|
|
|
|
|
2019-04-26 10:33:41 +02:00
|
|
|
// InputSame returns the type matching the field
|
|
|
|
func InputSame(kind reflect.Kind, value string) interface{} {
|
2018-10-16 20:18:39 +02:00
|
|
|
var val interface{}
|
|
|
|
var err error
|
|
|
|
|
|
|
|
switch kind {
|
|
|
|
case reflect.String:
|
|
|
|
val = value
|
|
|
|
case reflect.Int:
|
|
|
|
val, err = strconv.ParseInt(value, 10, 64)
|
|
|
|
case reflect.Uint:
|
|
|
|
val, err = strconv.ParseUint(value, 10, 64)
|
|
|
|
case reflect.Float64:
|
|
|
|
val, err = strconv.ParseFloat(value, 64)
|
|
|
|
case reflect.Bool:
|
|
|
|
val, err = strconv.ParseBool(value)
|
|
|
|
default:
|
|
|
|
panic(`Cannot pass value to checks on type ` + kind.String())
|
|
|
|
}
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
panic(`Invalid value "` + value + `"`)
|
|
|
|
}
|
|
|
|
|
|
|
|
return val
|
|
|
|
}
|