esyn 0.9.1

De/Serialization Rust In Rust.
Documentation
pub trait EsynDefault {
    fn esyn_default() -> Self;
}

macro_rules! impl_EsynDefault_for {
    ( $($t:ty)* ) => {$(
impl EsynDefault for $t {
    fn esyn_default() -> Self {
        Self::default()
    }
}
    )*}
}

macro_rules! impl_EsynDefault_for_tuple {
    ( $($t:ident),+ ) => {
impl< $($t: EsynDefault),+ > EsynDefault for ( $($t,)+ ) {
    fn esyn_default() -> Self {
        ($(
            <$t as EsynDefault>::esyn_default(),
        )+)
    }
}
    }
}

impl_EsynDefault_for! {
    u8 u16 u32 u64 u128 usize
    i8 i16 i32 i64 i128 isize
    f32 f64
    bool
    char &str String
}

impl_EsynDefault_for_tuple!(T0);
impl_EsynDefault_for_tuple!(T0, T1);
impl_EsynDefault_for_tuple!(T0, T1, T2);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
impl_EsynDefault_for_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);

impl EsynDefault for () {
    fn esyn_default() -> Self {}
}

impl<T: EsynDefault + Copy, const N: usize> EsynDefault for [T; N] {
    fn esyn_default() -> Self {
        [T::esyn_default(); N]
    }
}

impl<T: EsynDefault> EsynDefault for Vec<T> {
    fn esyn_default() -> Self {
        Default::default()
    }
}

impl<T: EsynDefault> EsynDefault for Option<T> {
    fn esyn_default() -> Self {
        None
    }
}

impl<T: EsynDefault> EsynDefault for Box<T> {
    fn esyn_default() -> Self {
        Box::new(T::esyn_default())
    }
}