use std::io::Read as _;
#[allow(unused_imports)]
use crate as cindy;
use crate::Context;
use super::Codec;
#[crate::remote]
pub fn decompress(data: Vec<u8>, codec: Codec) -> crate::Result<Vec<u8>> {
let mut out = Vec::new();
match codec {
Codec::Store => out = data,
Codec::Gzip => {
flate2::read::GzDecoder::new(&data[..])
.read_to_end(&mut out)
.context("gzip decompression failed")?;
}
Codec::Xz => {
let mut reader = std::io::BufReader::new(&data[..]);
lzma_rs::xz_decompress(&mut reader, &mut out).context("xz decompression failed")?;
}
Codec::Zstd => {
let mut decoder = ruzstd::decoding::StreamingDecoder::new(&data[..]).map_err(|e| {
anyhow_serde::Error::msg(format!("Couldn't start zstd decoder: {e}"))
})?;
decoder
.read_to_end(&mut out)
.context("zstd decompression failed")?;
}
}
Ok(out)
}