use fj_math::Scalar;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
pub struct Tolerance(Scalar);
impl Tolerance {
pub fn from_scalar(
scalar: impl Into<Scalar>,
) -> Result<Self, InvalidTolerance> {
let scalar = scalar.into();
if scalar <= Scalar::ZERO {
return Err(InvalidTolerance(scalar));
}
Ok(Self(scalar))
}
pub fn inner(&self) -> Scalar {
self.0
}
}
impl<S> From<S> for Tolerance
where
S: Into<Scalar>,
{
fn from(scalar: S) -> Self {
Self::from_scalar(scalar)
.expect("Tried to create `Tolerance` from invalid value")
}
}
#[derive(Debug, thiserror::Error)]
#[error("Invalid tolerance ({0}); must be above zero")]
pub struct InvalidTolerance(Scalar);