summaryrefslogtreecommitdiff
path: root/vendor/zune-inflate/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/zune-inflate/README.md')
-rw-r--r--vendor/zune-inflate/README.md120
1 files changed, 120 insertions, 0 deletions
diff --git a/vendor/zune-inflate/README.md b/vendor/zune-inflate/README.md
new file mode 100644
index 0000000..21b5850
--- /dev/null
+++ b/vendor/zune-inflate/README.md
@@ -0,0 +1,120 @@
+# zune-inflate
+
+This crate features an optimized inflate algorithm supporting
+whole buffer decompression.
+
+Supported formats are
+
+- raw deflate
+- zlib (deflate with a zlib wrapper on)
+- gzip
+
+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.
+
+## Installation
+
+To use in your crate, simply add the following in your
+Cargo.toml
+
+```toml
+[dependencies]
+#other amazing crates from other amazing people
+zune-inflate = "0.2.0"
+```
+
+## Features
+
+One can enable or disable a specific format using
+cargo features.
+
+Specifically, the following can be enabled
+
+- `gzip`: Enable decompressing of gzip encoded data
+- `zlib`: Enable decompressing of zlib encoded data
+
+To enable one feature, modify `Cargo.toml` entry to be
+
+```toml
+[dependencies]
+zune-inflate = { version = "0.2", default-features = false, features = ["#ADD_SPECIFIC_FEATURE"] }
+```
+
+## Usage.
+
+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
+
+### Decoding raw deflate
+
+To decode raw deflate data, the following code should get you
+started.
+
+```rust
+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();
+```
+
+### Decoding zlib
+
+To decode deflate data wrapped in zlib, the following code should get you
+started.
+
+```rust
+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();
+```
+
+### Advanced usage
+
+There are advanced options specified by `DeflateOptions` which can change
+decompression settings.
+
+## Comparisions.
+
+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<sup>[1]</sup> |
+
+<sup>[1]</sup> 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...
+
+### Benchmarks
+
+Up-to date benchmarks are done using criterion and hosted online at [zune-benchmarks] site,
+benchmarks for this library have the `inflate: ` prefix.
+
+
+## Fuzzing
+
+The decoder is currently fuzzed for correctness by both `miniz-oxide` and `zlib-ng`, see the fuzz/src directory
+
+[libdeflater]: https://github.com/adamkewley/libdeflater
+
+[libdeflate]:https://github.com/ebiggers/libdeflate
+
+[criterion]:https://github.com/bheisler/criterion.rs
+
+[zune-benchmarks]:https://etemesi254.github.io/posts/Zune-Benchmarks/ \ No newline at end of file