コンプ(compu)

Rust Compression library with generic interface
Features
All features are off by default.
This crate requires alloc to be available with system allocator set.
brotli-c - Enables brotli interface using C library.
brotli-rust - Enables brotli interface using pure Rust library.
zlib-ng - Enables zlib-ng interface.
zlib-rust - Enables zlib-rs interface.
zlib - Enables zlib interface.
zlib-static - Enables zlib interface with static feature.
zstd - Enables zstd interface.
bytes - Enables bytes support
Usage
Decode
Minimal example of using Decoder.
Use Interface to create instance.
use compu::{Decoder, DecodeStatus, DecodeError};
fn example(decoder: &mut Decoder, input: &[u8]) -> Result<Vec<u8>, DecodeError> {
let mut output = Vec::with_capacity(1024);
loop {
let result = decoder.decode_vec(input, &mut output).status?;
match result {
DecodeStatus::NeedInput => panic!("Not enough input, incomplete data?"),
DecodeStatus::NeedOutput => output.reserve(1024),
DecodeStatus::Finished => {
decoder.reset();
break Ok(output)
}
}
}
}
Encode
Minimal example of using Encoder.
Use Interface to create instance.
use compu::{Encoder, EncodeStatus, EncodeOp};
fn example(encoder: &mut Encoder, input: &[u8]) -> Vec<u8> {
let mut output = Vec::with_capacity(1024);
loop {
let result = encoder.encode_vec(input, &mut output, EncodeOp::Finish).status;
match result {
EncodeStatus::Continue => panic!("I wanted to finish but continue!?"),
EncodeStatus::NeedOutput => output.reserve(1024),
EncodeStatus::Finished => {
encoder.reset();
break output;
}
EncodeStatus::Error => {
panic!("unlikely")
}
}
}
}