52 lines · 1.6 KB · Rust
RawDownload
pub use flate2::{Decompress, Status}; /// non-streaming interfaces for decompressionpub mod inflate {    /// The error returned by various [Inflate methods][super::Inflate]    #[derive(Debug, thiserror::Error)]    #[allow(missing_docs)]    pub enum Error {        #[error("Could not write all bytes when decompressing content")]        WriteInflated(#[from] std::io::Error),        #[error("Could not decode zip stream, status was '{0:?}'")]        Inflate(#[from] flate2::DecompressError),        #[error("The zlib status indicated an error, status was '{0:?}'")]        Status(flate2::Status),    }} /// Decompress a few bytes of a zlib stream without allocationpub struct Inflate {    /// The actual decompressor doing all the work.    pub state: Decompress,} impl Default for Inflate {    fn default() -> Self {        Inflate {            state: Decompress::new(true),        }    }} impl Inflate {    /// Run the decompressor exactly once. Cannot be run multiple times    pub fn once(&mut self, input: &[u8], out: &mut [u8]) -> Result<(flate2::Status, usize, usize), inflate::Error> {        let before_in = self.state.total_in();        let before_out = self.state.total_out();        let status = self.state.decompress(input, out, flate2::FlushDecompress::None)?;        Ok((            status,            (self.state.total_in() - before_in) as usize,            (self.state.total_out() - before_out) as usize,        ))    }     /// Ready this instance for decoding another data stream.    pub fn reset(&mut self) {        self.state.reset(true);    }} ///pub mod stream;