use std::io::Write as _;
#[allow(unused_imports)]
use crate as cindy;
use crate::Context;
use super::Codec;
#[crate::remote]
pub fn compress(data: Vec<u8>, codec: Codec) -> crate::Result<Vec<u8>> {
let mut out = Vec::new();
match codec {
Codec::Store => out = data,
Codec::Gzip => {
let mut enc = flate2::write::GzEncoder::new(&mut out, flate2::Compression::default());
enc.write_all(&data).context("gzip compression failed")?;
enc.finish().context("gzip finalisation failed")?;
}
Codec::Xz => {
lzma_rs::xz_compress(&mut std::io::Cursor::new(&data), &mut out)
.context("xz compression failed")?;
}
Codec::Zstd => {
ruzstd::encoding::compress(
std::io::Cursor::new(&data),
&mut out,
ruzstd::encoding::CompressionLevel::Fastest,
);
}
}
Ok(out)
}