diff options
Diffstat (limited to 'third_party/rust/flate2/src/ffi/mod.rs')
-rw-r--r-- | third_party/rust/flate2/src/ffi/mod.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/third_party/rust/flate2/src/ffi/mod.rs b/third_party/rust/flate2/src/ffi/mod.rs new file mode 100644 index 0000000000..4135e1143a --- /dev/null +++ b/third_party/rust/flate2/src/ffi/mod.rs @@ -0,0 +1,46 @@ +//! This module contains backend-specific code. + +use crate::mem::{CompressError, DecompressError, FlushCompress, FlushDecompress, Status}; +use crate::Compression; + +/// Traits specifying the interface of the backends. +/// +/// Sync + Send are added as a condition to ensure they are available +/// for the frontend. +pub trait Backend: Sync + Send { + fn total_in(&self) -> u64; + fn total_out(&self) -> u64; +} + +pub trait InflateBackend: Backend { + fn make(zlib_header: bool, window_bits: u8) -> Self; + fn decompress( + &mut self, + input: &[u8], + output: &mut [u8], + flush: FlushDecompress, + ) -> Result<Status, DecompressError>; + fn reset(&mut self, zlib_header: bool); +} + +pub trait DeflateBackend: Backend { + fn make(level: Compression, zlib_header: bool, window_bits: u8) -> Self; + fn compress( + &mut self, + input: &[u8], + output: &mut [u8], + flush: FlushCompress, + ) -> Result<Status, CompressError>; + fn reset(&mut self); +} + +// Default to Rust implementation unless explicitly opted in to a different backend. +cfg_if::cfg_if! { + if #[cfg(any(feature = "miniz-sys", feature = "any_zlib"))] { + mod c; + pub use self::c::*; + } else { + mod rust; + pub use self::rust::*; + } +} |