This library is a rust binding for the zstd compression library.
cargo.toml$ cargo add zstd
# Cargo.toml [dependencies] zstd = "0.5"
This library provides Read and Write wrappers to handle (de)compression, along with convenience functions to made common tasks easier.
For instance, stream::copy_encode and stream::copy_decode are easy-to-use wrappers around std::io::copy. Check the stream example:
extern crate zstd; use std::io; // This function use the convenient `copy_encode` method fn compress(level: i32) { zstd::stream::copy_encode(io::stdin(), io::stdout(), level).unwrap(); } // This function does the same thing, directly using an `Encoder`: fn compress_manually(level: i32) { let mut encoder = zstd::stream::Encoder::new(io::stdout(), level).unwrap(); io::copy(&mut io::stdin(), &mut encoder).unwrap(); encoder.finish().unwrap(); } fn decompress() { zstd::stream::copy_decode(io::stdin(), io::stdout()).unwrap(); }
You can use this library to wrap non-blocking writer/readers: add the tokio feature, and stream::Encoder and stream::Decoder will implement AsyncWrite and AsyncRead, respectively.
zstd is included as a submodule. To get everything during your clone, use:
git clone https://github.com/gyscos/zstd-rs --recursive
Or, if you cloned it without the --recursive flag, call this from inside the repository:
git submodule update --init
Then, running cargo build should take care of building the C library and linking to it.
This library includes a pre-generated bindings.rs file. You can also generate new bindings at build-time, using the bindgen feature:
cargo build --features bindgen
This implementation is largely inspired by bozaro's lz4-rs.