mathru/algebra/abstr/
identity.rs

1//! Identity
2use super::operator::{Addition, Multiplication, Operator};
3
4/// A type that is equipped with identity.
5pub trait Identity<O: Operator>: Clone {
6    /// The identity element.
7    fn id() -> Self;
8}
9
10macro_rules! impl_identity
11{
12    ($t:ty; $v:expr; $($s:ty),*) =>
13    {
14        $(
15        impl Identity<$t> for $s
16        {
17            fn id() -> Self
18            {
19                return $v;
20            }
21        }
22        )*
23    };
24}
25
26impl_identity!(Addition; 0; u8, u16, u32, u64, u128, i8, i16, i32, i64, i128);
27impl_identity!(Addition; 0.0; f32, f64);
28impl_identity!(Multiplication; 1; u8, u16, u32, u64, u128, i8, i16, i32, i64, i128);
29impl_identity!(Multiplication; 1.0; f32, f64);