esyn/auto/
default.rs

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}