cas_lib/compression/
zstd.rs1use 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}