memorypack/traits/
tuples.rs1use 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);