scsys_core/id/impls/
impl_id_ops.rs

1/*
2    appellation: impl_id_ops <module>
3    authors: @FL03
4*/
5use crate::id::Id;
6use num_traits::{Num, One, Zero};
7
8impl<T> One for Id<T>
9where
10    T: One,
11{
12    fn one() -> Self {
13        Id(T::one())
14    }
15}
16
17impl<T> Zero for Id<T>
18where
19    T: Zero,
20{
21    fn zero() -> Self {
22        Id(T::zero())
23    }
24
25    fn is_zero(&self) -> bool {
26        self.get().is_zero()
27    }
28}
29
30impl<T> Num for Id<T>
31where
32    T: Num,
33{
34    type FromStrRadixErr = T::FromStrRadixErr;
35
36    fn from_str_radix(s: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr> {
37        T::from_str_radix(s, radix).map(Id)
38    }
39}
40
41contained::binary_wrapper! {
42    impl Id {
43        Add.add,
44        Sub.sub,
45        Mul.mul,
46        Div.div,
47        Rem.rem,
48        BitAnd.bitand,
49        BitOr.bitor,
50        BitXor.bitxor,
51        Shl.shl,
52        Shr.shr
53    }
54}
55
56contained::unary_wrapper! {
57    impl Id {
58        Neg.neg,
59        Not.not
60    }
61}