macro_rules! impl_marker {
($M:ty; $($T:ty),* $(,)*) => {
$(impl $M for $T { })+
}
}
macro_rules! impl_ident {
($M:ty; $V:expr; $($T:ty),* $(,)*) => {
$(impl Identity<$M> for $T { #[inline] fn id() -> $T {$V} })+
}
}
macro_rules! impl_approx_eq {
($V:expr; $($T:ty),* $(,)*) => {
$(impl ApproxEq for $T {
type Eps = $T;
#[inline]
fn default_epsilon() -> Self::Eps { $V }
#[inline]
fn approx_eq_eps(&self, b: &$T, epsilon: &$T) -> bool {
if self < b {
*b - *self <= *epsilon
} else {
*self - *b <= *epsilon
}
}
})+
}
}