rw_builder/
buffered.rs

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