Scope
Raw DEFLATE inflate and deflate with window bits 8 to 15 and levels 0 to 9; sync, full, and finish flushes; zlib and gzip framing with checksums always verified; preset dictionaries; per-message compression for WebSocket servers and clients (context takeover on or off); CRC-32 and Adler-32; std::io adapters. Brotli follows after 1.0. It does not negotiate HTTP or WebSocket headers (http-net and ws-net do) and it does not read archives.
Quick start
[]
= { = "compress-lib", = "0.7" }
One call each way, capped at 64 MiB of output by default:
let packed = compress; // Vec<u8>, level 6
let body = decompress?; // all members, checksums verified
let z = compress; // HTTP's "deflate" coding
let raw = compress; // raw DEFLATE
let any = decompress?; // gzip or zlib, detected
Limits for untrusted input:
let limits = new.with_max_output.with_max_ratio;
let body = decompress_with?; // OutputLimit, RatioLimit
WebSocket permessage-deflate (RFC 7692), one direction each:
use ;
let config = new.with_window_bits; // no context takeover by default
let mut tx = new?;
let mut rx = new?;
tx.compress_message?; // sync flush, tail removed
rx.decompress_message?; // budget checked while inflating
Streaming, with buffers you own, for any format:
use ;
let mut decoder = new;
let p = decoder.decompress?; // push input, pull output
match p.status
And std::io: compress::io::Reader, Writer, Encoder, DecodeWriter.
The complete planned API, with the version each item arrives in, is in docs/API.md.
Contributing
See dev/DIRECTIVES.md for engineering standards and the definition of done. Before a PR: cargo fmt --all, cargo clippy --all-targets --all-features -- -D warnings, and cargo test --all-features must be clean.