Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gyscos/zstd-rs
A rust binding for the zstd compression library.
https://github.com/gyscos/zstd-rs
compression rust-bindings wrapper zstd
Last synced: 6 days ago
JSON representation
A rust binding for the zstd compression library.
- Host: GitHub
- URL: https://github.com/gyscos/zstd-rs
- Owner: gyscos
- License: mit
- Created: 2016-02-19T20:44:03.000Z (almost 9 years ago)
- Default Branch: main
- Last Pushed: 2024-12-09T12:20:20.000Z (about 1 month ago)
- Last Synced: 2025-01-01T23:04:43.679Z (13 days ago)
- Topics: compression, rust-bindings, wrapper, zstd
- Language: Rust
- Size: 822 KB
- Stars: 528
- Watchers: 14
- Forks: 115
- Open Issues: 68
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust - gyscos/zstd-rs
- awesome-rust - gyscos/zstd-rs - rust binding for the zstd compression library (Libraries / Compression)
- fucking-awesome-rust - gyscos/zstd-rs - rust binding for the zstd compression library (Libraries / Compression)
- fucking-awesome-rust - gyscos/zstd-rs - rust binding for the zstd compression library (Libraries / Compression)
README
# zstd
[![crates.io](https://img.shields.io/crates/v/zstd.svg)](https://crates.io/crates/zstd)
[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)[![Build on Linux](https://github.com/gyscos/zstd-rs/actions/workflows/linux.yml/badge.svg)](https://github.com/gyscos/zstd-rs/actions/workflows/linux.yml)
[![Build on Windows](https://github.com/gyscos/zstd-rs/actions/workflows/windows.yml/badge.svg)](https://github.com/gyscos/zstd-rs/actions/workflows/windows.yml)
[![Build on macOS](https://github.com/gyscos/zstd-rs/actions/workflows/macos.yml/badge.svg)](https://github.com/gyscos/zstd-rs/actions/workflows/macos.yml)
[![Build on wasm](https://github.com/gyscos/zstd-rs/actions/workflows/wasm.yml/badge.svg)](https://github.com/gyscos/zstd-rs/actions/workflows/wasm.yml)This library is a rust binding for the [zstd compression library][zstd].
# [Documentation][doc]
## 1 - Add to `cargo.toml`
```bash
$ cargo add zstd
``````toml
# Cargo.toml[dependencies]
zstd = "0.13"
```## 2 - Usage
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:```rust
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();
}
```# Asynchronous support
The [`async-compression`](https://github.com/Nemo157/async-compression/) crate
provides an async-ready integration of various compression algorithms,
including `zstd-rs`.# Compile it yourself
`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.# Build-time bindgen
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
```# TODO
* Benchmarks, optimizations, ...
# Disclaimer
This implementation is largely inspired by bozaro's [lz4-rs].
# License
* The zstd C library is under a dual BSD/GPLv2 license.
* This zstd-rs binding library is under a [MIT](LICENSE) license.[zstd]: https://github.com/facebook/zstd
[lz4-rs]: https://github.com/bozaro/lz4-rs
[cargo-edit]: https://github.com/killercup/cargo-edit#cargo-add
[doc]: https://docs.rs/zstd
[stream]: examples/stream.rs
[submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules