#![no_std]
#![forbid(unsafe_code)]
extern crate alloc;
#[cfg(test)]
extern crate std;
use alloc::vec::Vec;
mod adler32;
mod bit;
mod buf;
mod crc32;
mod decode;
mod encode;
mod error;
pub mod gzip;
mod huffman;
mod lz77;
mod symbol;
pub mod zlib;
pub use adler32::{Adler32, adler32};
pub use crc32::{Crc32, crc32};
pub use decode::Decoder;
pub use encode::{EncodeOptions, Encoder};
pub use error::{Error, Result};
pub fn decompress(compressed: &[u8]) -> Result<Vec<u8>> {
let mut decoder = Decoder::new();
decoder.feed(compressed)?;
if !decoder.is_finished() {
return Err(Error::InvalidData(
"deflate stream ended before the final block".into(),
));
}
let out = decoder.output().to_vec();
decoder.advance(out.len());
Ok(out)
}
pub fn compress(uncompressed: &[u8]) -> Result<Vec<u8>> {
let mut encoder = Encoder::new();
encoder.feed(uncompressed)?;
encoder.finish()?;
let out = encoder.output().to_vec();
encoder.advance(out.len());
Ok(out)
}