Crates.io | zune-inflate |
lib.rs | zune-inflate |
version | 0.2.54 |
source | src |
created_at | 2022-12-31 20:34:03.390104 |
updated_at | 2023-04-30 12:46:39.401773 |
description | A heavily optimized deflate decompressor in Pure Rust |
homepage | https://github.com/etemesi254/zune-image/tree/main/zune-inflate |
repository | |
max_upload_size | |
id | 748561 |
size | 129,125 |
This crate features an optimized inflate algorithm supporting whole buffer decompression.
Supported formats are
The implementation is heavily based on Eric Biggers libdeflate and hence has similar characteristics.
Specifically, we do not support streaming decompression but prefer whole buffer decompression.
To use in your crate, simply add the following in your Cargo.toml
[dependencies]
#other amazing crates from other amazing people
zune-inflate = "0.2.0"
One can enable or disable a specific format using cargo features.
Specifically, the following can be enabled
gzip
: Enable decompressing of gzip encoded datazlib
: Enable decompressing of zlib encoded dataTo enable one feature, modify Cargo.toml
entry to be
[dependencies]
zune-inflate = { version = "0.2", default-features = false, features = ["#ADD_SPECIFIC_FEATURE"] }
The library exposes a simple API for decompressing
data, and depending on what type of data you have, you typically choose
one of the decode[_suffix]
function to decode your data
The decompressor expects the whole buffer handed upfront
To decode raw deflate data, the following code should get you started.
use zune_inflate::DeflateDecoder;
let totally_valid_data = [0; 23];
let mut decoder = DeflateDecoder::new( & totally_valid_data);
// panic on errors, because that's the cool way to go
let decompressed_data = decoder.decode_deflate().unwrap();
To decode deflate data wrapped in zlib, the following code should get you started.
use zune_inflate::DeflateDecoder;
let totally_valid_data = [0; 23];
let mut decoder = DeflateDecoder::new( & totally_valid_data);
// panic on errors, because that's the cool way to go
let decompressed_data = decoder.decode_zlib().unwrap();
There are advanced options specified by DeflateOptions
which can change
decompression settings.
I'll compare this with flate2
with miniz-oxide
backend.
feature | zune-inflate |
flate2 |
---|---|---|
zlib decompression | yes | yes |
delfate decompression | yes | yes |
gzip | yes | yes |
compression | soon | yes |
streaming decompression | no | yes |
unsafe | no | yes[1] |
[1] Flate writes to an uninitialized buffer
As you can see, there are some concrete features we currently lack when compared to flate2/miniz-oxide.
There's actually nothing riding in for us, except...it's wickedly fast...
Up-to date benchmarks are done using criterion and hosted online at zune-benchmarks site,
benchmarks for this library have the inflate:
prefix.
The decoder is currently fuzzed for correctness by both miniz-oxide
and zlib-ng
, see the fuzz/src directory