martin_tile_utils/
decoders.rs1use std::io::Read as _;
2
3use flate2::read::{GzEncoder, MultiGzDecoder, ZlibDecoder, ZlibEncoder};
4
5pub fn decode_gzip(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
6 let mut decoder = hotpath::io!(MultiGzDecoder::new(data), label = "decode_gzip");
7 let mut decompressed = Vec::new();
8 decoder.read_to_end(&mut decompressed)?;
9 Ok(decompressed)
10}
11
12pub fn encode_zlib(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
13 let mut encoder = hotpath::io!(
14 ZlibEncoder::new(data, flate2::Compression::default()),
15 label = "encode_zlib"
16 );
17 let mut compressed = Vec::new();
18 encoder.read_to_end(&mut compressed)?;
19 Ok(compressed)
20}
21
22pub fn decode_zlib(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
23 let mut decoder = hotpath::io!(ZlibDecoder::new(data), label = "decode_zlib");
24 let mut decompressed = Vec::new();
25 decoder.read_to_end(&mut decompressed)?;
26 Ok(decompressed)
27}
28
29pub fn encode_gzip(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
30 let mut encoder = hotpath::io!(
31 GzEncoder::new(data, flate2::Compression::default()),
32 label = "encode_gzip"
33 );
34 let mut compressed = Vec::new();
35 encoder.read_to_end(&mut compressed)?;
36 Ok(compressed)
37}
38
39pub fn decode_brotli(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
40 let mut decoder = hotpath::io!(
41 brotli::Decompressor::new(data, 4096),
42 label = "decode_brotli"
43 );
44 let mut decompressed = Vec::new();
45 decoder.read_to_end(&mut decompressed)?;
46 Ok(decompressed)
47}
48
49pub fn encode_brotli(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
50 let mut encoder = hotpath::io!(
51 brotli::CompressorReader::new(data, 4096, 11, 22),
52 label = "encode_brotli"
53 );
54 let mut compressed = Vec::new();
55 encoder.read_to_end(&mut compressed)?;
56 Ok(compressed)
57}
58
59pub fn encode_brotli_with_quality(data: &[u8], quality: u32) -> Result<Vec<u8>, std::io::Error> {
61 let mut encoder = hotpath::io!(
62 brotli::CompressorReader::new(data, 4096, quality.min(11), 22),
63 label = "encode_brotli_with_quality"
64 );
65 let mut compressed = Vec::new();
66 encoder.read_to_end(&mut compressed)?;
67 Ok(compressed)
68}
69
70pub fn decode_zstd(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
71 let mut decoder = hotpath::io!(zstd::Decoder::new(data)?, label = "decode_zstd");
72 let mut decompressed = Vec::new();
73 decoder.read_to_end(&mut decompressed)?;
74 Ok(decompressed)
75}
76
77pub fn encode_zstd(data: &[u8]) -> Result<Vec<u8>, std::io::Error> {
78 let mut encoder = hotpath::io!(
79 zstd::stream::read::Encoder::new(data, 0)?,
80 label = "encode_zstd"
81 );
82 let mut compressed = Vec::new();
83 encoder.read_to_end(&mut compressed)?;
84 Ok(compressed)
85}