1use crate::{Result, RwBuilder};
2pub use bzip2::Compression;
3
4#[derive(Debug)]
7#[must_use]
8pub struct BzBuilder<B>
9where
10 B: RwBuilder,
11{
12 builder: B,
14 compression: Compression,
16}
17
18impl<B> BzBuilder<B>
19where
20 B: RwBuilder,
21{
22 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}