use super::Error;
use lz4_flex::block::{compress_prepend_size, decompress_size_prepended};
type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Algorithm {
Lz4,
Zstd(i32),
}
impl Default for Algorithm {
fn default() -> Self {
Algorithm::Zstd(zstd::DEFAULT_COMPRESSION_LEVEL)
}
}
pub fn compress(data: &[u8], algorithm: Algorithm) -> Result<Vec<u8>> {
match algorithm {
Algorithm::Lz4 => {
Ok(compress_prepend_size(data))
}
Algorithm::Zstd(level) => {
zstd::encode_all(data, level).map_err(|e| Error::Zstd { source: e })
}
}
}
pub fn decompress(data: &[u8], algorithm: Algorithm) -> Result<Vec<u8>> {
match algorithm {
Algorithm::Lz4 => {
decompress_size_prepended(data).map_err(|e| Error::Lz4Decompress { source: e })
}
Algorithm::Zstd(_) => {
zstd::decode_all(data).map_err(|e| Error::Zstd { source: e })
}
}
}