compression-rs 0.2.1

Safe Rust bindings for Apple's Compression and AppleArchive APIs on macOS
Documentation
mod support;

use compression::{Algorithm, Decoder, Encoder};
use support::pseudo_random_bytes;

#[test]
fn compression_stream_round_trips_in_chunks() -> Result<(), Box<dyn std::error::Error>> {
    let input = pseudo_random_bytes(32 * 1024);
    let split = input.len() / 2;

    let mut stream_encoder = Encoder::new(Algorithm::Lzfse)?;
    let mut encoded_bytes = stream_encoder.process(&input[..split])?;
    encoded_bytes.extend(stream_encoder.process(&input[split..])?);
    encoded_bytes.extend(stream_encoder.finish()?);
    assert!(stream_encoder.finish()?.is_empty());

    let encoded_split = encoded_bytes.len() / 2;
    let mut stream_decoder = Decoder::new(Algorithm::Lzfse)?;
    let mut decoded_bytes = stream_decoder.process(&encoded_bytes[..encoded_split])?;
    decoded_bytes.extend(stream_decoder.process(&encoded_bytes[encoded_split..])?);
    decoded_bytes.extend(stream_decoder.finish()?);
    assert!(stream_decoder.finish()?.is_empty());

    assert_eq!(decoded_bytes, input);
    Ok(())
}