1 | macro_rules! impl_for { |
2 | ($trait:ident, $typ_:ty, $block:tt) => { |
3 | impl $trait for $typ_ $block |
4 | }; |
5 | } |
6 | |
7 | macro_rules! impl_for_ints { |
8 | ($trait:ident, $block:tt) => { |
9 | impl_for!($trait, i8, $block); |
10 | impl_for!($trait, i16, $block); |
11 | impl_for!($trait, i32, $block); |
12 | impl_for!($trait, i64, $block); |
13 | impl_for!($trait, i128, $block); |
14 | impl_for!($trait, u8, $block); |
15 | impl_for!($trait, u16, $block); |
16 | impl_for!($trait, u32, $block); |
17 | impl_for!($trait, u64, $block); |
18 | impl_for!($trait, u128, $block); |
19 | }; |
20 | } |
21 | |
22 | macro_rules! impl_for_floats { |
23 | ($trait:ident, $block:tt) => { |
24 | impl_for!($trait, f32, $block); |
25 | impl_for!($trait, f64, $block); |
26 | }; |
27 | } |
28 | |
29 | macro_rules! impl_for_numerics { |
30 | ($trait:ident, $block:tt) => { |
31 | impl_for_ints!($trait, $block); |
32 | impl_for_floats!($trait, $block); |
33 | }; |
34 | } |
35 | |
36 | macro_rules! impl_for_time_types { |
37 | ($trait:ident, $block:tt) => { |
38 | impl_for!($trait, core::time::Duration, $block); |
39 | #[cfg(feature = "std" )] |
40 | impl_for!($trait, std::time::Instant, $block); |
41 | #[cfg(feature = "std" )] |
42 | impl_for!($trait, std::time::SystemTime, $block); |
43 | }; |
44 | } |
45 | |
46 | macro_rules! impl_for_ints_and_duration { |
47 | ($trait:ident, $block:tt) => { |
48 | impl_for_ints!($trait, $block); |
49 | impl_for!($trait, core::time::Duration, $block); |
50 | }; |
51 | } |
52 | |
53 | macro_rules! impl_for_all { |
54 | ($trait:ident, $block:tt) => { |
55 | impl_for_numerics!($trait, $block); |
56 | impl_for_time_types!($trait, $block); |
57 | }; |
58 | |
59 | ($trait:ident) => { |
60 | impl_for_all!($trait, {}); |
61 | }; |
62 | } |
63 | |