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 {}