use std::{cell::RefCell, io}; use zstd::bulk::Compressor; // The library supports regular compression levels from 1 up to ZSTD_maxCLevel(), // which is currently 22. Levels >= 20 // Default level is ZSTD_CLEVEL_DEFAULT==3. // value 0 means default, which is controlled by ZSTD_CLEVEL_DEFAULT thread_local! { static COMPRESSOR: RefCell>> = RefCell::new(Compressor::new(crate::config::COMPRESS_LEVEL)); } pub fn compress(data: &[u8]) -> Vec { let mut out = Vec::new(); COMPRESSOR.with(|c| { if let Ok(mut c) = c.try_borrow_mut() { match &mut *c { Ok(c) => match c.compress(data) { Ok(res) => out = res, Err(err) => { crate::log::debug!("Failed to compress: {}", err); } }, Err(err) => { crate::log::debug!("Failed to get compressor: {}", err); } } } }); out } pub fn decompress(data: &[u8]) -> Vec { zstd::decode_all(data).unwrap_or_default() }