Skip to main content

lb_rs/model/
compression_service.rs

1use std::io::{Read, Write};
2
3use flate2::Compression;
4use flate2::read::ZlibDecoder;
5use flate2::write::ZlibEncoder;
6
7use super::errors::{LbErrKind, LbResult};
8
9pub fn compress(content: &[u8]) -> LbResult<Vec<u8>> {
10    let mut encoder = ZlibEncoder::new(Vec::new(), Compression::default());
11    encoder
12        .write_all(content)
13        .map_err(|err| LbErrKind::Unexpected(format!("unexpected compression error: {err:?}")))?;
14
15    Ok(encoder
16        .finish()
17        .map_err(|err| LbErrKind::Unexpected(format!("unexpected compression error: {err:?}")))?)
18}
19
20pub fn decompress(content: &[u8]) -> LbResult<Vec<u8>> {
21    let mut decoder = ZlibDecoder::new(content);
22    let mut result = Vec::<u8>::new();
23    decoder
24        .read_to_end(&mut result)
25        .map_err(|err| LbErrKind::Unexpected(format!("unexpected compression error: {err:?}")))?;
26    Ok(result)
27}
28
29#[test]
30fn compress_decompress() {
31    assert_eq!(decompress(&compress(b"hello").unwrap()).unwrap(), b"hello");
32}