memorypack/traits/
tuples.rs

1use crate::error::MemoryPackError;
2use crate::reader::MemoryPackReader;
3use crate::traits::{MemoryPackDeserialize, MemoryPackSerialize};
4use crate::writer::MemoryPackWriter;
5
6macro_rules! impl_tuple {
7    ($($T:ident),+) => {
8        impl<$($T),+> MemoryPackSerialize for ($($T,)+)
9        where
10            $($T: MemoryPackSerialize,)+
11        {
12            #[allow(non_snake_case)]
13            #[inline]
14            fn serialize(&self, writer: &mut MemoryPackWriter) -> Result<(), MemoryPackError> {
15                let ($($T,)+) = self;
16                $($T.serialize(writer)?;)+
17                Ok(())
18            }
19        }
20
21        impl<$($T),+> MemoryPackDeserialize for ($($T,)+)
22        where
23            $($T: MemoryPackDeserialize,)+
24        {
25            #[inline]
26            fn deserialize(reader: &mut MemoryPackReader) -> Result<Self, MemoryPackError> {
27                Ok(($($T::deserialize(reader)?,)+))
28            }
29        }
30    };
31}
32
33impl_tuple!(T1);
34impl_tuple!(T1, T2);
35impl_tuple!(T1, T2, T3);
36impl_tuple!(T1, T2, T3, T4);
37impl_tuple!(T1, T2, T3, T4, T5);
38impl_tuple!(T1, T2, T3, T4, T5, T6);
39impl_tuple!(T1, T2, T3, T4, T5, T6, T7);
40impl_tuple!(T1, T2, T3, T4, T5, T6, T7, T8);
41impl_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9);
42impl_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10);
43impl_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11);
44impl_tuple!(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12);