#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct IdentityTransform;
pub trait Invertible {
fn inverse(&self) -> Self;
}
pub trait Composable {
fn compose(&self, other: &Self) -> Self;
}
pub trait DeltaTransform {
fn delta_transform(&self, other: &Self) -> Self;
}
impl<T: Invertible + Composable> DeltaTransform for T {
fn delta_transform(&self, other: &Self) -> Self {
self.inverse().compose(other)
}
}