codeq/codec/impls/
tuple_2_impl.rs1use std::io;
2
3use crate::Decode;
4use crate::Encode;
5
6impl<A: Encode, B: Encode> Encode for (A, B) {
7 fn encode<W: io::Write>(&self, mut w: W) -> Result<usize, io::Error> {
8 let mut n = 0;
9 n += self.0.encode(&mut w)?;
10 n += self.1.encode(&mut w)?;
11 Ok(n)
12 }
13}
14
15impl<A: Decode, B: Decode> Decode for (A, B) {
16 fn decode<R: io::Read>(mut r: R) -> Result<Self, io::Error> {
17 let a = A::decode(&mut r)?;
18 let b = B::decode(&mut r)?;
19 Ok((a, b))
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use std::io;
26
27 use crate::Decode;
28 use crate::Encode;
29
30 #[test]
31 fn test_tuple_2_codec() -> Result<(), io::Error> {
32 let v = (1u64, 2u32);
33 let mut buf = Vec::new();
34 let n = v.encode(&mut buf)?;
35 assert_eq!(n, buf.len());
36 assert_eq!(buf.len(), 8 + 4);
37
38 let b = <(u64, u32)>::decode(&mut buf.as_slice())?;
39 assert_eq!(v, b);
40
41 Ok(())
42 }
43}