diff --git a/Cargo.toml b/Cargo.toml index 265b506..1e53f5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,8 @@ travis-ci = { repository = "gyscos/zstd-rs" } [dependencies] libc = "0.2" zstd-sys = { path="zstd-sys", version = "1.1.5-a", default-features = false } +tokio-io = { version = "0.1", optional = true } +futures = { version = "0.1", optional = true } [dev-dependencies] clap = "2.6.0" @@ -24,3 +26,4 @@ clap = "2.6.0" default = ["legacy"] legacy = ["zstd-sys/legacy"] bindgen = ["zstd-sys/bindgen"] +tokio = ["tokio-io", "futures"] diff --git a/src/lib.rs b/src/lib.rs index 21305a3..25c4cb5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,6 +31,13 @@ pub mod stream; pub mod block; pub mod dict; +#[cfg(feature = "tokio")] +#[macro_use] +extern crate tokio_io; +#[cfg(feature = "tokio")] +extern crate futures; + + use std::ffi::CStr; use std::io; diff --git a/src/stream/encoder.rs b/src/stream/encoder.rs index a9d0ae5..f93a0a6 100644 --- a/src/stream/encoder.rs +++ b/src/stream/encoder.rs @@ -4,6 +4,11 @@ use parse_code; use std::io::{self, Write}; use zstd_sys; +#[cfg(feature = "tokio")] +use futures::Poll; +#[cfg(feature = "tokio")] +use tokio_io::AsyncWrite; + struct EncoderContext { s: *mut zstd_sys::ZSTD_CStream, } @@ -328,6 +333,14 @@ impl Write for Encoder { } } +#[cfg(feature = "tokio")] +impl AsyncWrite for Encoder { + fn shutdown(&mut self) -> Poll<(), io::Error> { + try_nb!(self.do_finish()); + self.writer.shutdown() + } +} + #[cfg(test)] mod tests { use super::Encoder;