1pub trait EsynDefault {
2 fn esyn_default() -> Self;
3}
4
5macro_rules! impl_EsynDefault_for {
6 ( $($t:ty)* ) => {$(
7impl EsynDefault for $t {
8 fn esyn_default() -> Self {
9 Self::default()
10 }
11}
12 )*}
13}
14
15macro_rules! impl_EsynDefault_for_tuple {
16 ( $($t:ident),+ ) => {
17impl< $($t: EsynDefault),+ > EsynDefault for ( $($t,)+ ) {
18 fn esyn_default() -> Self {
19 ($(
20 <$t as EsynDefault>::esyn_default(),
21 )+)
22 }
23}
24 }
25}
26
27impl_EsynDefault_for! {
28 u8 u16 u32 u64 u128 usize
29 i8 i16 i32 i64 i128 isize
30 f32 f64
31 bool
32 char &str String
33}
34
35impl_EsynDefault_for_tuple!(T0);
36impl_EsynDefault_for_tuple!(T0, T1);
37impl_EsynDefault_for_tuple!(T0, T1, T2);
38impl_EsynDefault_for_tuple!(T0, T1, T2, T3);
39impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4);
40impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5);
41impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6);
42impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7);
43impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8);
44impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9);
45impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
46impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);
47
48impl EsynDefault for () {
49 fn esyn_default() -> Self {}
50}
51
52impl<T: EsynDefault + Copy, const N: usize> EsynDefault for [T; N] {
53 fn esyn_default() -> Self {
54 [T::esyn_default(); N]
55 }
56}
57
58impl<T: EsynDefault> EsynDefault for Vec<T> {
59 fn esyn_default() -> Self {
60 Default::default()
61 }
62}
63
64impl<T: EsynDefault> EsynDefault for Option<T> {
65 fn esyn_default() -> Self {
66 None
67 }
68}
69
70impl<T: EsynDefault> EsynDefault for Box<T> {
71 fn esyn_default() -> Self {
72 Box::new(T::esyn_default())
73 }
74}