1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use crate::de::{Decode, Decoder, PackDecoder};
use crate::en::{Encode, Encoder, PackEncoder};
macro_rules! declare {
() => {
};
($ty0:ident, $ident0:ident $(,)? $($ty:ident, $ident:ident),*) => {
impl<$ty0, $($ty),*> Encode for ($ty0, $($ty),*) where $ty0: Encode, $($ty: Encode),* {
#[inline]
fn encode<E>(&self, encoder: E) -> Result<(), E::Error>
where
E: Encoder
{
let ($ident0, $($ident),*) = self;
let mut pack = encoder.encode_pack()?;
<$ty0>::encode($ident0, pack.next()?)?;
$(<$ty>::encode($ident, pack.next()?)?;)*
Ok(())
}
}
impl<'de, $ty0, $($ty,)*> Decode<'de> for ($ty0, $($ty),*) where $ty0: Decode<'de>, $($ty: Decode<'de>),* {
#[inline]
fn decode<D>(decoder: D) -> Result<Self, D::Error>
where
D: Decoder<'de>
{
let mut unpack = decoder.decode_pack()?;
let $ident0 = unpack.next().and_then(<$ty0>::decode)?;
$(let $ident = unpack.next().and_then(<$ty>::decode)?;)*
Ok(($ident0, $($ident),*))
}
}
declare!($($ty, $ident),*);
};
}
declare!(T0, t0, T1, t1, T2, t2, T3, t3, T4, t4, T5, t5, T6, t6, T7, t7, T8, t8, T9, t9, T10, t10);