1use crate::{HSerde, HSerdeError};
2
3impl<T: HSerde, U: HSerde> HSerde for (T, U) {
4
5 fn to_bytes(&self) -> Vec<u8> {
6 vec![
7 self.0.to_bytes(),
8 self.1.to_bytes()
9 ].concat()
10 }
11
12 fn from_bytes_internal(bytes: &[u8], index: usize) -> Result<(Self, usize), HSerdeError> {
13 let (e0, ind0) = T::from_bytes_internal(bytes, index)?;
14 let (e1, ind1) = U::from_bytes_internal(bytes, ind0)?;
15
16 Ok(((e0, e1), ind1))
17 }
18
19}
20
21impl<T: HSerde, U: HSerde, V: HSerde> HSerde for (T, U, V) {
22
23 fn to_bytes(&self) -> Vec<u8> {
24 vec![
25 self.0.to_bytes(),
26 self.1.to_bytes(),
27 self.2.to_bytes(),
28 ].concat()
29 }
30
31 fn from_bytes_internal(bytes: &[u8], index: usize) -> Result<(Self, usize), HSerdeError> {
32 let (e0, ind0) = T::from_bytes_internal(bytes, index)?;
33 let (e1, ind1) = U::from_bytes_internal(bytes, ind0)?;
34 let (e2, ind2) = V::from_bytes_internal(bytes, ind1)?;
35
36 Ok(((e0, e1, e2), ind2))
37 }
38
39}
40
41impl<T: HSerde, U: HSerde, V: HSerde, W: HSerde> HSerde for (T, U, V, W) {
42
43 fn to_bytes(&self) -> Vec<u8> {
44 vec![
45 self.0.to_bytes(),
46 self.1.to_bytes(),
47 self.2.to_bytes(),
48 self.3.to_bytes(),
49 ].concat()
50 }
51
52 fn from_bytes_internal(bytes: &[u8], index: usize) -> Result<(Self, usize), HSerdeError> {
53 let (e0, ind0) = T::from_bytes_internal(bytes, index)?;
54 let (e1, ind1) = U::from_bytes_internal(bytes, ind0)?;
55 let (e2, ind2) = V::from_bytes_internal(bytes, ind1)?;
56 let (e3, ind3) = W::from_bytes_internal(bytes, ind2)?;
57
58 Ok(((e0, e1, e2, e3), ind3))
59 }
60
61}
62
63impl<T: HSerde, U: HSerde, V: HSerde, W: HSerde, X: HSerde> HSerde for (T, U, V, W, X) {
64
65 fn to_bytes(&self) -> Vec<u8> {
66 vec![
67 self.0.to_bytes(),
68 self.1.to_bytes(),
69 self.2.to_bytes(),
70 self.3.to_bytes(),
71 self.4.to_bytes(),
72 ].concat()
73 }
74
75 fn from_bytes_internal(bytes: &[u8], index: usize) -> Result<(Self, usize), HSerdeError> {
76 let (e0, ind0) = T::from_bytes_internal(bytes, index)?;
77 let (e1, ind1) = U::from_bytes_internal(bytes, ind0)?;
78 let (e2, ind2) = V::from_bytes_internal(bytes, ind1)?;
79 let (e3, ind3) = W::from_bytes_internal(bytes, ind2)?;
80 let (e4, ind4) = X::from_bytes_internal(bytes, ind3)?;
81
82 Ok(((e0, e1, e2, e3, e4), ind4))
83 }
84
85}