Skip to main content

rw_builder/
bzip2.rs

1use crate::{Result, RwBuilder};
2pub use bzip2::Compression;
3
4/// Type returned by the `bzip2` function on the `RwBuilderExt` trait.
5/// It is itself an `RwBuilder` so can be chained further.
6#[derive(Debug)]
7#[must_use]
8pub struct BzBuilder<B>
9where
10    B: RwBuilder,
11{
12    /// Inner builder
13    builder: B,
14    /// Compression level for bzip2
15    compression: Compression,
16}
17
18impl<B> BzBuilder<B>
19where
20    B: RwBuilder,
21{
22    /// Factory function to wrap an inner builder
23    pub const fn new(builder: B, compression: Compression) -> Self {
24        Self { builder, compression }
25    }
26}
27
28impl<B> RwBuilder for BzBuilder<B>
29where
30    B: RwBuilder,
31{
32    type Reader = bzip2::read::BzDecoder<B::Reader>;
33
34    fn reader(&self) -> Result<Self::Reader> {
35        let reader = self.builder.reader()?;
36        Ok(bzip2::read::BzDecoder::new(reader))
37    }
38
39    type Writer = bzip2::write::BzEncoder<B::Writer>;
40
41    fn writer(&self) -> Result<Self::Writer> {
42        let writer = self.builder.writer()?;
43        Ok(bzip2::write::BzEncoder::new(writer, self.compression))
44    }
45}