1use crate::traits::*;
2
3macro_rules! impl_traits_for_tuple {
5 ($($num:tt $ty:ident),*) => {
6 impl<'a, $($ty),*> TlRead<'a> for ($($ty),*,)
7 where
8 $($ty: TlRead<'a>),*
9 {
10 type Repr = Bare;
11
12 #[inline(always)]
13 fn read_from(packet: &mut &'a [u8]) -> TlResult<Self> {
14 Ok(($(ok!($ty::read_from(packet))),*,))
15 }
16 }
17
18 impl<$($ty),*> TlWrite for ($($ty),*,)
19 where
20 $($ty: TlWrite),*
21 {
22 type Repr = Bare;
23
24 #[inline(always)]
25 fn max_size_hint(&self) -> usize {
26 let mut result = 0;
27 $(result += self.$num.max_size_hint());*;
28 result
29 }
30
31 #[inline(always)]
32 fn write_to<P>(&self, packet: &mut P)
33 where
34 P: TlPacket,
35 {
36 $(self.$num.write_to(packet));*;
37 }
38 }
39 };
40}
41
42impl_traits_for_tuple!(0 T0);
43impl_traits_for_tuple!(0 T0, 1 T1);
44impl_traits_for_tuple!(0 T0, 1 T1, 2 T2);
45impl_traits_for_tuple!(0 T0, 1 T1, 2 T2, 3 T3);
46impl_traits_for_tuple!(0 T0, 1 T1, 2 T2, 3 T3, 4 T4);
47impl_traits_for_tuple!(0 T0, 1 T1, 2 T2, 3 T3, 4 T4, 5 T5);