Skip to main content

cas_lib/compression/
zstd.rs

1use std::io::Cursor;
2
3use crate::error::{CasError, CasResult};
4
5/// Compresses data using Zstandard compression algorithm.
6/// The `level` parameter controls the compression level (0-22).
7/// Higher levels result in better compression but slower performance.
8pub fn compress(data_to_compress: Vec<u8>, level: i32) -> CasResult<Vec<u8>> {
9    let cursor = Cursor::new(data_to_compress);
10    let mut compressed_data = Vec::new();
11    zstd::stream::copy_encode(cursor, &mut compressed_data, level)
12        .map_err(|_| CasError::CompressionFailed)?;
13    Ok(compressed_data)
14}
15
16/// Decompresses data using Zstandard decompression algorithm.
17pub fn decompress(data_to_decompress: Vec<u8>) -> CasResult<Vec<u8>> {
18    let mut cursor = Cursor::new(data_to_decompress);
19    let mut decompressed_data = Vec::new();
20    zstd::stream::copy_decode(&mut cursor, &mut decompressed_data)
21        .map_err(|_| CasError::CompressionFailed)?;
22    Ok(decompressed_data)
23}