An implementation of a DEFLATE encoder in pure rust. Not a direct port, but does take some inspiration from zlib, miniz and zopfli. The API is based on the one in the flate2 crate that contains bindings to zlib and miniz.
So far, deflate encoding with and without zlib and gzip metadata (zlib dictionaryies are not supported yet) has been is implemented. Speed-wise it's not quite up to miniz-levels yet (between 10% and twice as slow for most files, seems to be slow on very small files, close to miniz on larger ones).
use deflate::deflate_bytes; let data = b"Some data"; let compressed = deflate_bytes(&data);
use std::io::Write; use deflate::Compression; use deflate::write::ZlibEncoder; let data = b"This is some test data"; let mut encoder = ZlibEncoder::new(Vec::new(), Compression::Default); encoder.write_all(data).unwrap(); let compressed_data = encoder.finish().unwrap();
deflate is distributed under the terms of both the MIT and Apache 2.0 licences.
bitstream.rs is © @nwin and was released under both MIT and Apache 2.0
Some code in length_encode.rs has been ported from the
miniz library, which is public domain.
The test data (src/pg11.txt) is borrowed from Project Gutenberg and is available under public domain, or the Project Gutenberg Licence