orx_pseudo_default/implementations/
impl_macros.rs

1/// Implements PseudoDefault on type T.
2#[macro_export]
3macro_rules! impl_on_type {
4    ($t:ty, $value:expr) => {
5        impl $crate::PseudoDefault for $t {
6            fn pseudo_default() -> Self {
7                $value
8            }
9        }
10    };
11}
12
13/// Implements PseudoDefault on type T and &'a T.
14#[macro_export]
15macro_rules! impl_on_static_life_type {
16    ($t:ty, $value:expr) => {
17        impl $crate::PseudoDefault for $t {
18            fn pseudo_default() -> Self {
19                $value
20            }
21        }
22
23        impl<'a> $crate::PseudoDefault for &'a $t {
24            fn pseudo_default() -> Self {
25                &$value
26            }
27        }
28    };
29}
30
31/// Implements PseudoDefault on generic type `G<T>` or `G<T, U>.`
32#[macro_export]
33macro_rules! impl_on_generic_type {
34    ($t:ty, $g:ident, $value:expr) => {
35        impl<$g> $crate::PseudoDefault for $t {
36            fn pseudo_default() -> Self {
37                $value
38            }
39        }
40    };
41
42    ($t:ty, $g:ident, $h:ident, $value:expr) => {
43        impl<$g, $h> $crate::PseudoDefault for $t {
44            fn pseudo_default() -> Self {
45                $value
46            }
47        }
48    };
49}
50
51/// Implements PseudoDefault on generic type `G<T>` and `&'a G<T>`
52#[macro_export]
53macro_rules! impl_on_static_life_generic_type {
54    ($t:ty, $g:ident, $value:expr) => {
55        impl<$g> $crate::PseudoDefault for $t {
56            fn pseudo_default() -> Self {
57                $value
58            }
59        }
60
61        impl<'a, $g> $crate::PseudoDefault for &'a $t {
62            fn pseudo_default() -> Self {
63                &$value
64            }
65        }
66    };
67}
68
69/// Implements PseudoDefault on `G<T>` by calling `G::new(T::pseudo_default())`
70#[macro_export]
71macro_rules! impl_new_from_pseudo_default {
72    ($t:ty, $g:ident) => {
73        impl<$g: $crate::PseudoDefault> $crate::PseudoDefault for $t {
74            fn pseudo_default() -> Self {
75                Self::new($g::pseudo_default())
76            }
77        }
78    };
79}