photon_protocol/compressor/
zstd.rs1use bytes::BytesMut;
2
3use crate::ports::compress::{CompressionError, Compressor};
4
5#[derive(Clone)]
6pub struct ZstdCompressor {
7 level: i32,
8}
9
10impl ZstdCompressor {
11 pub fn new(level: i32) -> Self {
12 Self { level }
13 }
14}
15
16impl Default for ZstdCompressor {
17 fn default() -> Self {
18 Self { level: 3 }
19 }
20}
21
22impl Compressor for ZstdCompressor {
23 fn compress(&self, input: &[u8], output: &mut BytesMut) -> Result<(), CompressionError> {
24 let compressed = zstd::encode_all(input, self.level)
25 .map_err(|e| CompressionError::Unknown(e.into()))?;
26
27 output.extend_from_slice(&compressed);
28 Ok(())
29 }
30
31 fn decompress(&self, input: &[u8], output: &mut BytesMut) -> Result<(), CompressionError> {
32 let decompressed = zstd::decode_all(input)
33 .map_err(|_| CompressionError::CorruptPayload {
34 compressor_name: self.name().to_owned(),
35 })?;
36
37 output.extend_from_slice(&decompressed);
38 Ok(())
39 }
40
41 fn name(&self) -> &'static str {
42 "zstd"
43 }
44}