compression_codecs/
lib.rs

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