npsd 0.2.0

Network payload serializer / deserializer framework
Documentation
use super::{PayloadInfo, helper::size_array};

#[macro_export]
macro_rules! payload_info_tuple {
    (($(($T:ident, $i:tt)),+), $len:tt) => {
        impl<'a, $($T),+> PayloadInfo for ($($T,)+) 
            where
                $($T: PayloadInfo,)+
        {
            const HASH: u64 = 0 $( ^ <$T>::HASH )+;
            const TYPE: &'static str = "tuple";
            const SIZE: Option<usize> = size_array([$(
                <$T>::SIZE
            ),+]);
        }
    };
}

payload_info_tuple!(((A, 0)), 1);
payload_info_tuple!(((A, 0), (B, 1)), 2);
payload_info_tuple!(((A, 0), (B, 1), (C, 2)), 3);
payload_info_tuple!(((A, 0), (B, 1), (C, 2), (D, 3)), 4);
payload_info_tuple!(((A, 0), (B, 1), (C, 2), (D, 3), (E, 4)), 5);
payload_info_tuple!(((A, 0), (B, 1), (C, 2), (D, 3), (E, 4), (F, 5)), 6);
payload_info_tuple!(((A, 0), (B, 1), (C, 2), (D, 3), (E, 4), (F, 5), (G, 6)), 7);
payload_info_tuple!(((A, 0), (B, 1), (C, 2), (D, 3), (E, 4), (F, 5), (G, 6), (H, 7)), 8);