Skip to main content

bincode_next/de/
impl_tuples.rs

1use super::BorrowDecode;
2use super::BorrowDecoder;
3use super::Decode;
4use super::Decoder;
5use crate::error::DecodeError;
6
7macro_rules! impl_tuple {
8    () => {};
9    ($first:ident $(, $extra:ident)*) => {
10        impl<'de, $first $(, $extra)*, Context> BorrowDecode<'de, Context> for ($first, $($extra, )*)
11        where
12            $first: BorrowDecode<'de, Context>,
13        $(
14            $extra : BorrowDecode<'de, Context>,
15        )*
16         {
17             #[inline(always)]
18            fn borrow_decode<BD: BorrowDecoder<'de, Context = Context>>(decoder: &mut BD) -> Result<Self, DecodeError> {
19                Ok((
20                    $first::borrow_decode(decoder)?,
21                    $($extra :: borrow_decode(decoder)?, )*
22                ))
23            }
24        }
25
26        impl<Context, $first $(, $extra)*> Decode<Context> for ($first, $($extra, )*)
27        where
28            $first: Decode<Context>,
29        $(
30            $extra : Decode<Context>,
31        )*
32        {
33            #[inline(always)]
34            fn decode<DE: Decoder<Context = Context>>(decoder: &mut DE) -> Result<Self, DecodeError> {
35                Ok((
36                    $first::decode(decoder)?,
37                    $($extra :: decode(decoder)?, )*
38                ))
39            }
40        }
41    }
42}
43
44impl_tuple!(A);
45impl_tuple!(A, B);
46impl_tuple!(A, B, C);
47impl_tuple!(A, B, C, D);
48impl_tuple!(A, B, C, D, E);
49impl_tuple!(A, B, C, D, E, F);
50impl_tuple!(A, B, C, D, E, F, G);
51impl_tuple!(A, B, C, D, E, F, G, H);
52impl_tuple!(A, B, C, D, E, F, G, H, I);
53impl_tuple!(A, B, C, D, E, F, G, H, I, J);
54impl_tuple!(A, B, C, D, E, F, G, H, I, J, K);
55impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L);
56impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M);
57impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M, N);
58impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O);
59impl_tuple!(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P);