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