Skip to main content

01_roundtrip/
01_roundtrip.rs

1mod common;
2
3use common::pseudo_random_bytes;
4use compression::{Algorithm, Decoder, Encoder};
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7    let input = pseudo_random_bytes(64 * 1024);
8    let split = input.len() / 2;
9
10    let mut encoder = Encoder::new(Algorithm::Lzfse)?;
11    let mut compressed = encoder.process(&input[..split])?;
12    compressed.extend(encoder.process(&input[split..])?);
13    compressed.extend(encoder.finish()?);
14
15    let mut decoder = Decoder::new(Algorithm::Lzfse)?;
16    let encoded_split = compressed.len() / 2;
17    let mut round_trip = decoder.process(&compressed[..encoded_split])?;
18    round_trip.extend(decoder.process(&compressed[encoded_split..])?);
19    round_trip.extend(decoder.finish()?);
20
21    assert_eq!(round_trip, input);
22    let input_len = input.len();
23    let compressed_len = compressed.len();
24    println!("input={input_len} compressed={compressed_len}");
25    println!("✅ compression stream round-trip OK");
26    Ok(())
27}