Skip to main content

martin_tile_utils/
decoders.rs

1use std::io::{Read as _, Write as _};
2
3use flate2::read::{GzDecoder, ZlibDecoder};
4use flate2::write::GzEncoder;
5
6pub fn decode_gzip(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
7    let mut decoder = GzDecoder::new(data);
8    let mut decompressed = Vec::new();
9    decoder.read_to_end(&mut decompressed)?;
10    Ok(decompressed)
11}
12
13pub fn encode_zlib(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
14    let mut encoder = flate2::write::ZlibEncoder::new(Vec::new(), flate2::Compression::default());
15    encoder.write_all(data)?;
16    encoder.finish()
17}
18
19pub fn decode_zlib(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
20    let mut decoder = ZlibDecoder::new(data);
21    let mut decompressed = Vec::new();
22    decoder.read_to_end(&mut decompressed)?;
23    Ok(decompressed)
24}
25
26pub fn encode_gzip(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
27    let mut encoder = GzEncoder::new(Vec::new(), flate2::Compression::default());
28    encoder.write_all(data)?;
29    encoder.finish()
30}
31
32pub fn decode_brotli(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
33    let mut decoder = brotli::Decompressor::new(data, 4096);
34    let mut decompressed = Vec::new();
35    decoder.read_to_end(&mut decompressed)?;
36    Ok(decompressed)
37}
38
39pub fn encode_brotli(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
40    let mut encoder = brotli::CompressorWriter::new(Vec::new(), 4096, 11, 22);
41    encoder.write_all(data)?;
42    Ok(encoder.into_inner())
43}
44
45pub fn decode_zstd(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
46    let mut decoder = zstd::Decoder::new(data)?;
47    let mut decompressed = Vec::new();
48    decoder.read_to_end(&mut decompressed)?;
49    Ok(decompressed)
50}
51
52pub fn encode_zstd(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
53    let mut encoder = zstd::Encoder::new(Vec::new(), 0)?;
54    encoder.write_all(data)?;
55    encoder.finish()
56}