msg_tool\scripts\kirikiri\archive\xp3/
reader.rs1use adler::Adler32;
2use std::io::{PipeReader, Read};
3
4pub struct Reader {
5 inner: PipeReader,
6 adler: Adler32,
7 readed: u64,
8}
9
10impl Reader {
11 pub fn new(inner: PipeReader) -> Self {
12 Self {
13 inner,
14 adler: Adler32::new(),
15 readed: 0,
16 }
17 }
18
19 pub fn into_checksum(self) -> u32 {
20 self.adler.checksum()
21 }
22
23 pub fn total_readed(&self) -> u64 {
24 self.readed
25 }
26}
27
28impl Read for Reader {
29 fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
30 let n = self.inner.read(buf)?;
31 self.adler.write_slice(&buf[..n]);
32 self.readed += n as u64;
33 Ok(n)
34 }
35}