1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use std::io::{Read, Write};
use crate::http_message::CompressionAlgorithm;
use flate2::bufread::{DeflateEncoder, GzEncoder};
use flate2::{Compression};
use flate2::read::{GzDecoder, DeflateDecoder};
pub struct Codex {}
impl Codex {
pub fn encode(reader: &[u8], mut writer: &mut Vec<u8>, compression: CompressionAlgorithm) {
match compression {
CompressionAlgorithm::GZIP => {
let mut gzip_encoder = GzEncoder::new(reader, Compression::fast());
gzip_encoder.read_to_end(&mut writer).unwrap();
}
CompressionAlgorithm::DEFLATE => {
let mut deflate_encoder = DeflateEncoder::new(reader, Compression::fast());
deflate_encoder.read_to_end(&mut writer).unwrap();
}
CompressionAlgorithm::BROTLI => {
let mut encoder = brotli::CompressorReader::new(reader, reader.len(), 5, 10);
encoder.read_to_end(writer).unwrap();
}
CompressionAlgorithm::NONE => panic!("Cannot decode with no compression algorithmw")
}
}
pub fn decode(reader: &mut [u8], mut writer: &mut Vec<u8>, compression: &CompressionAlgorithm) {
match compression {
CompressionAlgorithm::GZIP => {
let mut gzip_decoder = GzDecoder::new(&reader[..]);
gzip_decoder.read_to_end(&mut writer).unwrap();
}
CompressionAlgorithm::DEFLATE => {
let mut deflater = DeflateDecoder::new(&reader[..]);
deflater.read_to_end(writer).unwrap();
}
CompressionAlgorithm::BROTLI => {
let mut writer = brotli::DecompressorWriter::new(writer, reader.len());
writer.write(reader).unwrap();
}
CompressionAlgorithm::NONE => panic!("Cannot decode with no compression algorithmw")
}
}
}