Skip to main content

msg_wire/compression/
snappy.rs

1use bytes::Bytes;
2use snap::raw::{Decoder, Encoder};
3use std::io;
4
5use super::{CompressionType, Compressor, Decompressor};
6
7/// A compressor that uses the Snappy algorithm.
8#[derive(Default)]
9pub struct SnappyCompressor;
10
11impl Compressor for SnappyCompressor {
12    fn compression_type(&self) -> CompressionType {
13        CompressionType::Snappy
14    }
15
16    fn compress(&self, data: &[u8]) -> Result<Bytes, io::Error> {
17        let mut encoder = Encoder::new();
18
19        let bytes = encoder.compress_vec(data)?;
20
21        Ok(Bytes::from(bytes))
22    }
23}
24
25#[derive(Debug, Default)]
26pub struct SnappyDecompressor;
27
28impl Decompressor for SnappyDecompressor {
29    fn decompress(&self, data: &[u8]) -> Result<Bytes, io::Error> {
30        let mut decoder = Decoder::new();
31
32        let bytes = decoder.decompress_vec(data)?;
33
34        Ok(Bytes::from(bytes))
35    }
36}