Skip to main content

oxiarc_deflate/
lib.rs

1//! # OxiArc Deflate
2//!
3//! Pure Rust implementation of the DEFLATE compression algorithm (RFC 1951).
4//!
5//! This crate provides compression and decompression of DEFLATE data, which
6//! is the basis for ZIP, GZIP, and PNG formats.
7//!
8//! ## Features
9//!
10//! - **Decompression**: Full support for all DEFLATE block types
11//!   - Stored (uncompressed) blocks
12//!   - Fixed Huffman codes
13//!   - Dynamic Huffman codes
14//! - **Compression**: LZ77 + Huffman encoding
15//!   - Multiple compression levels (0-9)
16//!   - Fixed Huffman codes
17//!
18//! ## Example
19//!
20//! ```rust
21//! use oxiarc_deflate::{deflate, inflate};
22//!
23//! // Compress data
24//! let original = b"Hello, World! Hello, World!";
25//! let compressed = deflate(original, 6).unwrap();
26//!
27//! // Decompress data
28//! let decompressed = inflate(&compressed).unwrap();
29//! assert_eq!(&decompressed, original);
30//! ```
31//!
32//! ## Compression Levels
33//!
34//! - Level 0: No compression (stored blocks)
35//! - Level 1-3: Fast compression
36//! - Level 4-6: Balanced (default is 6)
37//! - Level 7-9: Best compression (slower)
38
39#![warn(missing_docs)]
40#![warn(clippy::all)]
41#![allow(clippy::module_name_repetitions)]
42
43pub mod deflate;
44pub mod gzip;
45pub mod huffman;
46pub mod inflate;
47pub mod lz77;
48pub mod optimal;
49pub mod pool;
50pub mod streaming;
51pub mod tables;
52pub mod zlib;
53
54#[cfg(feature = "async-io")]
55pub mod async_deflate;
56
57#[cfg(feature = "async-io")]
58pub mod raw_stream;
59
60#[cfg(feature = "parallel")]
61pub mod parallel;
62
63#[cfg(feature = "async-io")]
64pub use raw_stream::{RawDeflateWriter, RawInflateReader};
65
66#[cfg(feature = "parallel")]
67pub use parallel::{
68    DEFAULT_PARALLEL_CHUNK_SIZE, ParallelGzipEncoder, compress_deflate_parallel,
69    compress_gzip_parallel, gzip_compress_parallel,
70};
71
72// Re-exports
73pub use deflate::{Deflater, MAX_DICTIONARY_SIZE, deflate};
74pub use gzip::{GzipDecoder, GzipEncoder, gzip_compress, gzip_decompress};
75pub use huffman::{HuffmanBuilder, HuffmanTree};
76pub use inflate::{Inflater, inflate};
77pub use lz77::{Lz77Encoder, Lz77Params, Lz77Preset, Lz77Token};
78pub use optimal::OptimalParser;
79pub use pool::{DeflatePool, PoolStats};
80pub use streaming::{GzipStreamDecoder, GzipStreamEncoder, ZlibStreamDecoder, ZlibStreamEncoder};
81pub use zlib::{
82    Adler32, ZlibCompressor, ZlibDecompressor, zlib_compress, zlib_compress_with_dict,
83    zlib_decompress, zlib_decompress_with_dict, zlib_requires_dictionary,
84};