deboa_extras/io/
gzip.rs

1use std::io::{Read, Write};
2
3use bytes::{Buf, Bytes};
4use deboa::{
5    errors::DeboaError,
6    fs::io::{Compressor, Decompressor},
7    request::DeboaRequest,
8    response::DeboaResponse,
9};
10use flate2::{read::GzDecoder, write::GzEncoder};
11
12#[derive(PartialEq)]
13pub struct GzipCompressor;
14
15impl Compressor for GzipCompressor {
16    fn name(&self) -> String {
17        "gzip".to_string()
18    }
19
20    fn compress_body(&self, request: &DeboaRequest) -> Result<Bytes, DeboaError> {
21        let mut writer = GzEncoder::new(Vec::new(), flate2::Compression::default());
22        let result = writer.write_all(request.raw_body().as_ref());
23
24        if let Err(e) = result {
25            return Err(DeboaError::Compress { message: e.to_string() });
26        }
27
28        let result = writer.finish();
29
30        if let Err(e) = result {
31            return Err(DeboaError::Compress { message: e.to_string() });
32        }
33
34        Ok(Bytes::from(result.unwrap()))
35    }
36}
37
38#[derive(PartialEq)]
39pub struct GzipDecompressor;
40
41impl Decompressor for GzipDecompressor {
42    fn name(&self) -> String {
43        "gzip".to_string()
44    }
45
46    fn decompress_body(&self, response: &mut DeboaResponse) -> Result<(), DeboaError> {
47        let binding = response.raw_body();
48        let mut reader = GzDecoder::new(binding.reader());
49        let mut buffer = Vec::new();
50        let result = reader.read_to_end(&mut buffer);
51
52        if let Err(e) = result {
53            return Err(DeboaError::Decompress { message: e.to_string() });
54        }
55
56        response.set_raw_body(&buffer);
57
58        Ok(())
59    }
60}