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