animate-core 0.2.0

Animation library for Ratatui
Documentation
macro_rules! impl_ops {
    ($ty:ident) => {
        impl<T, E, I> std::ops::Deref for $ty<T, E, I>
        where
            T: $crate::Lerp + PartialEq + Default,
            E: Fn(f64) -> f64,
            I: Fn(&T, &T, f64) -> T,
        {
            type Target = T;
            fn deref(&self) -> &T {
                self.get()
            }
        }

        impl<T, E, I> std::fmt::Display for $ty<T, E, I>
        where
            T: $crate::Lerp + PartialEq + Default + std::fmt::Display,
            E: Fn(f64) -> f64,
            I: Fn(&T, &T, f64) -> T,
        {
            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
                self.get().fmt(f)
            }
        }

        impl<T, E, I> std::ops::AddAssign<T> for $ty<T, E, I>
        where
            T: $crate::Lerp + PartialEq + Default,
            E: Fn(f64) -> f64,
            I: Fn(&T, &T, f64) -> T,
            for<'b> &'b T: std::ops::Add<T, Output = T>,
        {
            fn add_assign(&mut self, rhs: T) {
                let v = self.target() + rhs;
                self.set(v);
            }
        }

        impl<T, E, I> std::ops::SubAssign<T> for $ty<T, E, I>
        where
            T: $crate::Lerp + PartialEq + Default,
            E: Fn(f64) -> f64,
            I: Fn(&T, &T, f64) -> T,
            for<'b> &'b T: std::ops::Sub<T, Output = T>,
        {
            fn sub_assign(&mut self, rhs: T) {
                let v = self.target() - rhs;
                self.set(v);
            }
        }

        impl<T, E, I> std::ops::MulAssign<T> for $ty<T, E, I>
        where
            T: $crate::Lerp + PartialEq + Default,
            E: Fn(f64) -> f64,
            I: Fn(&T, &T, f64) -> T,
            for<'b> &'b T: std::ops::Mul<T, Output = T>,
        {
            fn mul_assign(&mut self, rhs: T) {
                let v = self.target() * rhs;
                self.set(v);
            }
        }

        impl<T, E, I> std::ops::DivAssign<T> for $ty<T, E, I>
        where
            T: $crate::Lerp + PartialEq + Default,
            E: Fn(f64) -> f64,
            I: Fn(&T, &T, f64) -> T,
            for<'b> &'b T: std::ops::Div<T, Output = T>,
        {
            fn div_assign(&mut self, rhs: T) {
                let v = self.target() / rhs;
                self.set(v);
            }
        }
    };
}

pub(crate) use impl_ops;