bincode/de/
impl_tuples.rs

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