func IsValueValidAgainstRange()

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
}