1macro_rules! impl_for {
2 ($trait:ident, $typ_:ty, $block:tt) => {
3 impl $trait for $typ_ $block
4 };
5}
6
7macro_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
22macro_rules! impl_for_floats {
23 ($trait:ident, $block:tt) => {
24 impl_for!($trait, f32, $block);
25 impl_for!($trait, f64, $block);
26 };
27}
28
29macro_rules! impl_for_numerics {
30 ($trait:ident, $block:tt) => {
31 impl_for_ints!($trait, $block);
32 impl_for_floats!($trait, $block);
33 };
34}
35
36macro_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
46macro_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
53macro_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