Expand description
zenflate: Pure Rust DEFLATE/zlib/gzip compression and decompression.
A port of libdeflate to safe Rust.
- Compression (
Compressor) — buffer-to-buffer. Effort 0-30 with named presets (CompressionLevel::balanced(), etc.). Parallel gzip viaCompressor::gzip_compress_parallel(). - Decompression (
Decompressor) — buffer-to-buffer, fastest mode. - Streaming decompression (
StreamDecompressor) — pull-based, works with anyInputSourceincluding&[u8](zero-cost) andBufReadSourceforstd::io::BufRead.
All three DEFLATE-based formats (raw DEFLATE, zlib, gzip) are supported for both compression and decompression.
§Quick start
use zenflate::{Compressor, CompressionLevel, Decompressor, Unstoppable};
let data = b"Hello, World! Hello, World! Hello, World!";
// Compress (effort 15 = lazy matching, a good default)
let mut compressor = Compressor::new(CompressionLevel::balanced());
let bound = Compressor::deflate_compress_bound(data.len());
let mut compressed = vec![0u8; bound];
let csize = compressor.deflate_compress(data, &mut compressed, Unstoppable).unwrap();
// Decompress
let mut decompressor = Decompressor::new();
let mut output = vec![0u8; data.len()];
let result = decompressor
.deflate_decompress(&compressed[..csize], &mut output, Unstoppable)
.unwrap();
assert_eq!(&output[..result.output_written], &data[..]);§Compression levels
Use named presets or dial in a specific effort from 0 to 30:
| Preset | Effort | Strategy |
|---|---|---|
CompressionLevel::none() | 0 | Store (no compression) |
CompressionLevel::fastest() | 1 | Turbo hash table |
CompressionLevel::fast() | 10 | Greedy hash chains |
CompressionLevel::balanced() | 15 | Lazy matching (default) |
CompressionLevel::high() | 22 | Double-lazy matching |
CompressionLevel::best() | 30 | Near-optimal parsing |
CompressionLevel::new(n) accepts any effort 0-30
for fine-grained control between presets. Higher effort within a strategy
increases search depth and match quality.
CompressionLevel::libdeflate(n) (0-12)
produces byte-identical output with C libdeflate.
Re-exports§
pub use checksum::Adler32Hasher;pub use checksum::Crc32Hasher;pub use checksum::adler32;pub use checksum::adler32_combine;pub use checksum::crc32;pub use checksum::crc32_combine;pub use compress::CompressionLevel;pub use compress::Compressor;pub use decompress::streaming::BufReadSource;pub use decompress::streaming::DEFAULT_CAPACITY;pub use decompress::streaming::InputSource;pub use decompress::streaming::StreamDecompressor;pub use decompress::DecompressOutcome;pub use decompress::Decompressor;pub use error::StreamError;pub use error::CompressionError;pub use error::DecompressionError;
Modules§
- checksum
- Checksum algorithms: Adler-32 (zlib) and CRC-32 (gzip).
- compress
- DEFLATE/zlib/gzip compression.
- decompress
- DEFLATE decompression, ported from libdeflate’s deflate_decompress.c and decompress_template.h.
- error
- Error types for compression and decompression.
Structs§
- Unstoppable
- A
Stopimplementation that never stops (no cooperative cancellation).
Enums§
- Stop
Reason - Why an operation was stopped.
Traits§
- Stop
- Cooperative cancellation check.