1use anyhow::Result;
2
3use crate::{RwBuilder, SerDe};
4
5#[derive(Debug)]
9pub struct Builder<B>
10where
11 B: RwBuilder,
12{
13 builder: B,
15}
16
17impl<B> Builder<B>
18where
19 B: RwBuilder,
20{
21 #[must_use]
23 pub const fn new(builder: B) -> Self {
24 Self { builder }
25 }
26}
27
28impl<B> SerDe for Builder<B>
29where
30 B: RwBuilder,
31 B::Reader: std::io::Read,
32 B::Writer: std::io::Write,
33{
34 fn load<T>(&self) -> Result<T>
35 where
36 T: for<'de> serde::de::Deserialize<'de>,
37 {
38 let result = bincode::deserialize_from(self.builder.reader()?)?;
39 Ok(result)
40 }
41
42 fn save<T>(&self, value: &T) -> Result<()>
43 where
44 T: serde::ser::Serialize,
45 {
46 bincode::serialize_into(self.builder.writer()?, value)?;
47 Ok(())
48 }
49}