in pkg/validation/validate/values.go [329:382]
func IsValueValidAgainstRange(val interface{}, typeName, format, prefix, path string) error {
kind := reflect.ValueOf(val).Type().Kind()
// What is the string representation of val
stringRep := ""
switch kind {
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
stringRep = swag.FormatUint64(valueHelp.asUint64(val))
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
stringRep = swag.FormatInt64(valueHelp.asInt64(val))
case reflect.Float32, reflect.Float64:
stringRep = swag.FormatFloat64(valueHelp.asFloat64(val))
default:
return fmt.Errorf("%s value number range checking called with invalid (non numeric) val type in %s", prefix, path)
}
var errVal error
switch typeName {
case integerType:
switch format {
case integerFormatInt32:
_, errVal = swag.ConvertInt32(stringRep)
case integerFormatUInt32:
_, errVal = swag.ConvertUint32(stringRep)
case integerFormatUInt64:
_, errVal = swag.ConvertUint64(stringRep)
case integerFormatInt64:
fallthrough
default:
_, errVal = swag.ConvertInt64(stringRep)
}
case numberType:
fallthrough
default:
switch format {
case numberFormatFloat, numberFormatFloat32:
_, errVal = swag.ConvertFloat32(stringRep)
case numberFormatDouble, numberFormatFloat64:
fallthrough
default:
// No check can be performed here since
// no number beyond float64 is supported
}
}
if errVal != nil { // We don't report the actual errVal from strconv
if format != "" {
errVal = fmt.Errorf("%s value must be of type %s with format %s in %s", prefix, typeName, format, path)
} else {
errVal = fmt.Errorf("%s value must be of type %s (default format) in %s", prefix, typeName, path)
}
}
return errVal
}