use super::*;
use super::optimize_bytes::*;
use std::io::{self, Read};
use libflate::zlib::{Encoder, Decoder};
use crate::error::Result;
pub fn decompress_bytes(data: Bytes<'_>, expected_byte_size: usize) -> Result<ByteVec> {
let mut decompressed = Vec::with_capacity(expected_byte_size);
{
let mut decompressor = Decoder::new(data)?;
decompressor.read_to_end(&mut decompressed)?;
};
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 = Encoder::new(Vec::with_capacity(packed.len()))?;
io::copy(&mut packed.as_slice(), &mut compressor)?;
Ok(compressor.finish().into_result()?)
}
}