use crate::error::ConstraintError;
pub(crate) enum FloatInvalid {
Nan,
Negative,
Infinite,
}
pub(crate) fn check_f32_non_negative(value: f32) -> Result<(), FloatInvalid> {
match value {
v if v.is_nan() => Err(FloatInvalid::Nan),
v if v < 0.0 => Err(FloatInvalid::Negative),
v if v.is_infinite() => Err(FloatInvalid::Infinite),
_ => Ok(()),
}
}
pub(crate) fn check_f32_finite(value: f32) -> Result<(), FloatInvalid> {
match value {
v if v.is_nan() => Err(FloatInvalid::Nan),
v if v.is_infinite() => Err(FloatInvalid::Infinite),
_ => Ok(()),
}
}
pub(crate) fn float_invalid_to_constraint(
name: &'static str,
err: FloatInvalid,
) -> ConstraintError {
match err {
FloatInvalid::Nan => ConstraintError::IsNan(name),
FloatInvalid::Negative => ConstraintError::IsNegative(name),
FloatInvalid::Infinite => ConstraintError::IsInfinite(name),
}
}