use adler::Adler32; use std::io::{PipeReader, Read}; pub struct Reader { inner: PipeReader, adler: Adler32, readed: u64, } impl Reader { pub fn new(inner: PipeReader) -> Self { Self { inner, adler: Adler32::new(), readed: 0, } } pub fn into_checksum(self) -> u32 { self.adler.checksum() } pub fn total_readed(&self) -> u64 { self.readed } } impl Read for Reader { fn read(&mut self, buf: &mut [u8]) -> std::io::Result { let n = self.inner.read(buf)?; self.adler.write_slice(&buf[..n]); self.readed += n as u64; Ok(n) } }