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);