msg_wire/compression/
lz4.rs1use bytes::Bytes;
2use lz4_flex::{compress_prepend_size, decompress_size_prepended};
3use std::io;
4
5use super::{CompressionType, Compressor, Decompressor};
6
7#[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}