Skip to main content

msg_wire/compression/
lz4.rs

1use bytes::Bytes;
2use lz4_flex::{compress_prepend_size, decompress_size_prepended};
3use std::io;
4
5use super::{CompressionType, Compressor, Decompressor};
6
7/// A compressor that uses the LZ4 algorithm.
8#[derive(Default)]
9pub struct Lz4Compressor;
10
11impl Compressor for Lz4Compressor {
12    fn compression_type(&self) -> CompressionType {
13        CompressionType::Lz4
14    }
15
16    fn compress(&self, data: &[u8]) -> Result<Bytes, io::Error> {
17        let bytes = compress_prepend_size(data);
18
19        Ok(Bytes::from(bytes))
20    }
21}
22
23#[derive(Debug, Default)]
24pub struct Lz4Decompressor;
25
26impl Decompressor for Lz4Decompressor {
27    fn decompress(&self, data: &[u8]) -> Result<Bytes, io::Error> {
28        let bytes = decompress_size_prepended(data).map_err(|e| {
29            io::Error::new(io::ErrorKind::InvalidData, format!("Lz4 decompression failed: {e}"))
30        })?;
31
32        Ok(Bytes::from(bytes))
33    }
34}