Skip to main content

rw_builder/
lz4_flex.rs

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