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