Skip to main content

async_compression_issue_150_workaround/codec/
mod.rs

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