cas_lib/compression/
zstd.rs

1use std::{io::Cursor, sync::mpsc};
2
3pub fn compress(data_to_compress: Vec<u8>, level: i32) -> Vec<u8> {
4    let cursor = Cursor::new(data_to_compress);
5    let mut compressed_data = Vec::new();
6    zstd::stream::copy_encode(cursor, &mut compressed_data, level).unwrap();
7    compressed_data
8}
9
10pub fn compress_threadpool(data_to_compress: Vec<u8>, level: i32) -> Vec<u8> {
11    let (sender, receiver) = mpsc::channel();
12    rayon::spawn(move || {
13        let compressed_data = compress(data_to_compress, level);
14        sender.send(compressed_data).unwrap();
15    });
16    let result = receiver.recv().unwrap();
17    result
18}
19
20pub fn decompress(data_to_decompress: Vec<u8>) -> Vec<u8> {
21    let mut cursor = Cursor::new(data_to_decompress);
22    let mut decompressed_data = Vec::new();
23    zstd::stream::copy_decode(&mut cursor, &mut decompressed_data).unwrap();
24    decompressed_data
25}
26
27pub fn decompress_threadpool(data_to_decompress: Vec<u8>) -> Vec<u8> {
28    let (sender, receiver) = mpsc::channel();
29        rayon::spawn(move || {
30            let decompressed_data = decompress(data_to_decompress);
31            sender.send(decompressed_data).unwrap();
32        });
33        let result = receiver.recv().unwrap();
34        result
35}