cas_lib/compression/
zstd.rs1use std::{io::Cursor, sync::mpsc};
2
3pub fn compress(data_to_compress: Vec<u8>, level: i32) -> Vec<u8> {
7 let cursor = Cursor::new(data_to_compress);
8 let mut compressed_data = Vec::new();
9 zstd::stream::copy_encode(cursor, &mut compressed_data, level).unwrap();
10 compressed_data
11}
12
13pub fn compress_threadpool(data_to_compress: Vec<u8>, level: i32) -> Vec<u8> {
17 let (sender, receiver) = mpsc::channel();
18 rayon::spawn(move || {
19 let compressed_data = compress(data_to_compress, level);
20 sender.send(compressed_data).unwrap();
21 });
22 let result = receiver.recv().unwrap();
23 result
24}
25
26pub fn decompress(data_to_decompress: Vec<u8>) -> Vec<u8> {
28 let mut cursor = Cursor::new(data_to_decompress);
29 let mut decompressed_data = Vec::new();
30 zstd::stream::copy_decode(&mut cursor, &mut decompressed_data).unwrap();
31 decompressed_data
32}
33
34pub fn decompress_threadpool(data_to_decompress: Vec<u8>) -> Vec<u8> {
36 let (sender, receiver) = mpsc::channel();
37 rayon::spawn(move || {
38 let decompressed_data = decompress(data_to_decompress);
39 sender.send(decompressed_data).unwrap();
40 });
41 let result = receiver.recv().unwrap();
42 result
43}