1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
use lz4_flex::{compress_prepend_size, decompress_size_prepended}; use serde::{de::DeserializeOwned, Serialize}; pub fn compress<S: Serialize>(value: S) -> Vec<u8> { let serialized = serde_cbor::to_vec(&value).unwrap(); compress_prepend_size(&serialized) } #[derive(Debug, thiserror::Error)] pub enum Error { #[error("cbor serialization error {0:?}")] Cbor(#[from] serde_cbor::Error), #[error("decompression error {0:?}")] Decompress(#[from] lz4_flex::block::DecompressError), } pub fn decompress<D: DeserializeOwned>(bytes: &[u8]) -> Result<D, Error> { let serialized = decompress_size_prepended(bytes)?; serde_cbor::from_slice(&serialized).map_err(Error::from) }