hserde/
tuple.rs

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}