compression_codecs/
lib.rs

1//! Adaptors for various compression algorithms.
2
3#![cfg_attr(docsrs, feature(doc_auto_cfg, doc_cfg))]
4
5use std::io::Result;
6
7#[cfg(feature = "brotli")]
8pub mod brotli;
9#[cfg(feature = "bzip2")]
10pub mod bzip2;
11#[cfg(feature = "deflate")]
12pub mod deflate;
13#[cfg(feature = "deflate64")]
14pub mod deflate64;
15#[cfg(feature = "flate2")]
16pub mod flate;
17#[cfg(feature = "gzip")]
18pub mod gzip;
19#[cfg(feature = "lz4")]
20pub mod lz4;
21#[cfg(feature = "lzma")]
22pub mod lzma;
23#[cfg(feature = "xz")]
24pub mod xz;
25#[cfg(feature = "lzma")]
26pub mod xz2;
27#[cfg(feature = "zlib")]
28pub mod zlib;
29#[cfg(feature = "zstd")]
30pub mod zstd;
31
32use compression_core::util::PartialBuffer;
33
34#[cfg(feature = "brotli")]
35pub use self::brotli::{BrotliDecoder, BrotliEncoder};
36#[cfg(feature = "bzip2")]
37pub use self::bzip2::{BzDecoder, BzEncoder};
38#[cfg(feature = "deflate")]
39pub use self::deflate::{DeflateDecoder, DeflateEncoder};
40#[cfg(feature = "deflate64")]
41pub use self::deflate64::Deflate64Decoder;
42#[cfg(feature = "flate2")]
43pub use self::flate::{FlateDecoder, FlateEncoder};
44#[cfg(feature = "gzip")]
45pub use self::gzip::{GzipDecoder, GzipEncoder};
46#[cfg(feature = "lz4")]
47pub use self::lz4::{Lz4Decoder, Lz4Encoder};
48#[cfg(feature = "lzma")]
49pub use self::lzma::{LzmaDecoder, LzmaEncoder};
50#[cfg(feature = "xz")]
51pub use self::xz::{XzDecoder, XzEncoder};
52#[cfg(feature = "lzma")]
53pub use self::xz2::{Xz2Decoder, Xz2Encoder, Xz2FileFormat};
54#[cfg(feature = "zlib")]
55pub use self::zlib::{ZlibDecoder, ZlibEncoder};
56#[cfg(feature = "zstd")]
57pub use self::zstd::{ZstdDecoder, ZstdEncoder};
58
59pub trait Encode {
60    fn encode(
61        &mut self,
62        input: &mut PartialBuffer<impl AsRef<[u8]>>,
63        output: &mut PartialBuffer<impl AsRef<[u8]> + AsMut<[u8]>>,
64    ) -> Result<()>;
65
66    /// Returns whether the internal buffers are flushed
67    fn flush(&mut self, output: &mut PartialBuffer<impl AsRef<[u8]> + AsMut<[u8]>>)
68        -> Result<bool>;
69
70    /// Returns whether the internal buffers are flushed and the end of the stream is written
71    fn finish(
72        &mut self,
73        output: &mut PartialBuffer<impl AsRef<[u8]> + AsMut<[u8]>>,
74    ) -> Result<bool>;
75}
76
77pub trait Decode {
78    /// Reinitializes this decoder ready to decode a new member/frame of data.
79    fn reinit(&mut self) -> Result<()>;
80
81    /// Returns whether the end of the stream has been read
82    fn decode(
83        &mut self,
84        input: &mut PartialBuffer<impl AsRef<[u8]>>,
85        output: &mut PartialBuffer<impl AsRef<[u8]> + AsMut<[u8]>>,
86    ) -> Result<bool>;
87
88    /// Returns whether the internal buffers are flushed
89    fn flush(&mut self, output: &mut PartialBuffer<impl AsRef<[u8]> + AsMut<[u8]>>)
90        -> Result<bool>;
91
92    /// Returns whether the internal buffers are flushed
93    fn finish(
94        &mut self,
95        output: &mut PartialBuffer<impl AsRef<[u8]> + AsMut<[u8]>>,
96    ) -> Result<bool>;
97}