use crate::error::ErrorKind;
#[cfg(feature = "lz4-compresion")]
pub mod lz4;
pub trait CompressionStrategy: Clone + Default + Send + Sync {
fn compress(&self, buffer: &[u8]) -> Vec<u8>;
fn decompress(&self, buffer: &[u8]) -> Result<Vec<u8>, ErrorKind>;
}
#[derive(Clone, Debug, PartialOrd, PartialEq)]
pub struct ModificationCompressor<S: CompressionStrategy> {
strategy: S,
}
impl<S: CompressionStrategy> ModificationCompressor<S> {
pub fn new(strategy: S) -> ModificationCompressor<S> {
ModificationCompressor { strategy }
}
pub fn compress(&self, buffer: &[u8]) -> Vec<u8> {
self.strategy.compress(buffer)
}
pub fn decompress(&self, buffer: &[u8]) -> Result<Vec<u8>, ErrorKind> {
self.strategy.decompress(buffer)
}
}
impl<S: CompressionStrategy> Default for ModificationCompressor<S> {
fn default() -> Self {
ModificationCompressor::new(Default::default())
}
}