1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use crate::error::Result; use crate::lz4; use crate::type_utils::ArqRead; #[derive(PartialEq, Debug, Clone)] pub enum CompressionType { None, Gzip, LZ4, } impl CompressionType { pub fn new<R: ArqRead>(mut reader: R) -> Result<CompressionType> { let c = reader.read_arq_i32()?; Ok(match c { 0 => CompressionType::None, 1 => CompressionType::Gzip, 2 => CompressionType::LZ4, _ => panic!("Compression type '{}' unknown", c), }) } pub fn decompress(compressed: &[u8], compression_type: CompressionType) -> Result<Vec<u8>> { Ok(match compression_type { CompressionType::LZ4 => lz4::decompress(compressed)?, CompressionType::Gzip => unimplemented!(), CompressionType::None => compressed.to_owned(), }) } }