valence_protocol/impls/
tuple.rs

1use std::io::Write;
2
3use crate::{Decode, Encode};
4
5macro_rules! impl_tuple {
6    ($($ty:ident)*) => {
7        #[allow(non_snake_case)]
8        impl<$($ty: Encode,)*> Encode for ($($ty,)*) {
9            fn encode(&self, mut _w: impl Write) -> anyhow::Result<()> {
10                let ($($ty,)*) = self;
11                $(
12                    $ty.encode(&mut _w)?;
13                )*
14                Ok(())
15            }
16        }
17
18        impl<'a, $($ty: Decode<'a>,)*> Decode<'a> for ($($ty,)*) {
19            fn decode(_r: &mut &'a [u8]) -> anyhow::Result<Self> {
20                Ok(($($ty::decode(_r)?,)*))
21            }
22        }
23    }
24}
25
26impl_tuple!();
27impl_tuple!(A);
28impl_tuple!(A B);
29impl_tuple!(A B C);
30impl_tuple!(A B C D);
31impl_tuple!(A B C D E);
32impl_tuple!(A B C D E F);
33impl_tuple!(A B C D E F G);
34impl_tuple!(A B C D E F G H);
35impl_tuple!(A B C D E F G H I);
36impl_tuple!(A B C D E F G H I J);
37impl_tuple!(A B C D E F G H I J K);
38impl_tuple!(A B C D E F G H I J K L);