msg_wire/compression/
zstd.rs1use bytes::Bytes;
2use std::io;
3use zstd::{decode_all, stream::encode_all};
4
5use super::{CompressionType, Compressor, Decompressor};
6
7pub struct ZstdCompressor {
8 level: i32,
9}
10
11impl ZstdCompressor {
12 pub fn new(level: i32) -> Self {
15 Self { level }
16 }
17}
18
19impl Compressor for ZstdCompressor {
20 fn compression_type(&self) -> CompressionType {
21 CompressionType::Zstd
22 }
23
24 fn compress(&self, data: &[u8]) -> Result<Bytes, io::Error> {
25 let compressed = encode_all(data, self.level)?;
26
27 Ok(Bytes::from(compressed))
28 }
29}
30
31#[derive(Debug, Default)]
32pub struct ZstdDecompressor;
33
34impl Decompressor for ZstdDecompressor {
35 fn decompress(&self, data: &[u8]) -> Result<Bytes, io::Error> {
36 let decompressed = decode_all(data)?;
37
38 Ok(Bytes::from(decompressed))
39 }
40}