1use crate::{Result, RwBuilder};
2use serde::{de::DeserializeOwned, Serialize};
3
4#[derive(Debug)]
7#[must_use]
8pub struct Builder<B>
9where
10 B: RwBuilder,
11{
12 builder: B,
14}
15
16impl<B> Builder<B>
17where
18 B: RwBuilder,
19{
20 pub const fn new(builder: B) -> Self {
22 Self { builder }
23 }
24}
25
26impl<B> Builder<B>
27where
28 B: RwBuilder,
29 B::Reader: std::io::Read,
30 B::Writer: std::io::Write,
31{
32 pub fn load<T: DeserializeOwned>(&self) -> Result<T> {
36 let reader = self.builder.reader()?;
37 serde_json::from_reader(reader).map_err(|e| crate::error::Error::Other(e.to_string()))
38 }
39
40 pub fn save<T: Serialize>(&self, item: &T) -> Result<()> {
44 let writer = self.builder.writer()?;
45 serde_json::to_writer(writer, item).map_err(|e| crate::error::Error::Other(e.to_string()))
46 }
47}