use super::*;
use super::optimize_bytes::*;
use std::io;
use crate::error::Result;
use deflate::write::ZlibEncoder;
use inflate::inflate_bytes_zlib;
pub fn decompress_bytes(data: Bytes<'_>) -> Result<ByteVec> {
let mut decompressed = inflate_bytes_zlib(data)
.map_err(|msg| Error::invalid(msg))?;
differences_to_samples(&mut decompressed);
interleave_byte_blocks(&mut decompressed);
Ok(decompressed)
}
pub fn compress_bytes(packed: Bytes<'_>) -> Result<ByteVec> {
let mut packed = Vec::from(packed); separate_bytes_fragments(&mut packed);
samples_to_differences(&mut packed);
{
let mut compressor = ZlibEncoder::new(
Vec::with_capacity(packed.len()),
deflate::Compression::Fast
);
io::copy(&mut packed.as_slice(), &mut compressor)?;
Ok(compressor.finish()?)
}
}