zebra_chain/serialization/
read_zcash.rs

1use std::io;
2
3/// Extends [`Read`] with methods for writing Zcash/Bitcoin types.
4///
5/// [`Read`]: https://doc.rust-lang.org/std/io/trait.Read.html
6pub trait ReadZcashExt: io::Read {
7    /// Convenience method to read a `[u8; 4]`.
8    #[inline]
9    fn read_4_bytes(&mut self) -> io::Result<[u8; 4]> {
10        let mut bytes = [0; 4];
11        self.read_exact(&mut bytes)?;
12        Ok(bytes)
13    }
14
15    /// Convenience method to read a `[u8; 12]`.
16    #[inline]
17    fn read_12_bytes(&mut self) -> io::Result<[u8; 12]> {
18        let mut bytes = [0; 12];
19        self.read_exact(&mut bytes)?;
20        Ok(bytes)
21    }
22
23    /// Convenience method to read a `[u8; 32]`.
24    #[inline]
25    fn read_32_bytes(&mut self) -> io::Result<[u8; 32]> {
26        let mut bytes = [0; 32];
27        self.read_exact(&mut bytes)?;
28        Ok(bytes)
29    }
30
31    /// Convenience method to read a `[u8; 64]`.
32    #[inline]
33    fn read_64_bytes(&mut self) -> io::Result<[u8; 64]> {
34        let mut bytes = [0; 64];
35        self.read_exact(&mut bytes)?;
36        Ok(bytes)
37    }
38}
39
40/// Mark all types implementing `Read` as implementing the extension.
41impl<R: io::Read + ?Sized> ReadZcashExt for R {}