micromegas_telemetry/
compression.rs1use anyhow::{Context, Result};
2use std::io::Read;
3use std::io::Write;
4
5pub fn compress(src: &[u8]) -> Result<Vec<u8>> {
9 let mut compressed = Vec::new();
10 let mut encoder = lz4::EncoderBuilder::new()
11 .level(10)
12 .build(&mut compressed)
13 .with_context(|| "allocating lz4 encoder")?;
14 let _size = encoder
15 .write(src)
16 .with_context(|| "writing to lz4 encoder")?;
17 let (_writer, res) = encoder.finish();
18 res.with_context(|| "closing lz4 encoder")?;
19 Ok(compressed)
20}
21
22pub fn decompress(compressed: &[u8]) -> Result<Vec<u8>> {
26 let mut decompressed = Vec::new();
27 let mut decoder = lz4::Decoder::new(compressed).with_context(|| "allocating lz4 decoder")?;
28 let _size = decoder
29 .read_to_end(&mut decompressed)
30 .with_context(|| "reading lz4-compressed buffer")?;
31 let (_reader, res) = decoder.finish();
32 res?;
33 Ok(decompressed)
34}