1pub use flate2::{Decompress, Status};
2
3pub mod inflate {
5 use quick_error::quick_error;
6 quick_error! {
7 #[allow(missing_docs)]
9 #[derive(Debug)]
10 pub enum Error {
11 WriteInflated(err: std::io::Error) {
12 display("Could not write all bytes when decompressing content")
13 from()
14 }
15 Inflate(err: flate2::DecompressError) {
16 display("Could not decode zip stream, status was '{:?}'", err)
17 from()
18 }
19 Status(status: flate2::Status) {
20 display("The zlib status indicated an error, status was '{:?}'", status)
21 }
22 }
23 }
24}
25
26pub struct Inflate {
28 pub state: Decompress,
30}
31
32impl Default for Inflate {
33 fn default() -> Self {
34 Inflate {
35 state: Decompress::new(true),
36 }
37 }
38}
39
40impl Inflate {
41 pub fn once(&mut self, input: &[u8], out: &mut [u8]) -> Result<(flate2::Status, usize, usize), inflate::Error> {
43 let before_in = self.state.total_in();
44 let before_out = self.state.total_out();
45 let status = self.state.decompress(input, out, flate2::FlushDecompress::None)?;
46 Ok((
47 status,
48 (self.state.total_in() - before_in) as usize,
49 (self.state.total_out() - before_out) as usize,
50 ))
51 }
52}
53
54pub mod stream;