Skip to main content

rw_builder/
buffered.rs

1use std::io::{BufReader, BufWriter};
2
3use crate::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)]
10#[must_use]
11pub struct Builder<B>
12where
13    B: RwBuilder,
14{
15    /// The inner builder it wraps
16    builder: B,
17}
18
19impl<B> Builder<B>
20where
21    B: RwBuilder,
22{
23    /// Factory function to wrap an inner builder
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}