use brotli::enc::BrotliEncoderParams;
use brotli::CompressorWriter;
use brotli::DecompressorWriter;
use serde::Deserialize;
use serde::Serialize;
use std::io::Write;
pub fn compress<T>(x: &T, compression_level: i32) -> Vec<u8>
where
T: Serialize,
{
let serialized = postcard::to_stdvec(x).unwrap(); let params = BrotliEncoderParams {
quality: compression_level,
..Default::default()
};
let mut compressed_writer = CompressorWriter::with_params(Vec::new(), 4096, ¶ms);
compressed_writer.write_all(&serialized).unwrap(); compressed_writer.flush().unwrap(); compressed_writer.into_inner()
}
pub fn decompress<T>(x: &[u8]) -> T
where
T: for<'a> Deserialize<'a>,
{
let mut decompressor_writer = DecompressorWriter::new(Vec::new(), 4096);
decompressor_writer.write_all(x).unwrap(); decompressor_writer.flush().unwrap(); let decompressed = decompressor_writer.into_inner().unwrap(); postcard::from_bytes(&decompressed).unwrap() }