use anyhow::Result;
use crate::{RwBuilder, SerDe};
#[derive(Debug)]
pub struct Builder<B>
where
B: RwBuilder,
{
builder: B,
}
impl<B> Builder<B>
where
B: RwBuilder,
{
#[must_use]
pub const fn new(builder: B) -> Self {
Self { builder }
}
}
impl<B> SerDe for Builder<B>
where
B: RwBuilder,
B::Reader: std::io::Read,
B::Writer: std::io::Write,
{
fn load<T>(&self) -> Result<T>
where
T: for<'de> serde::de::Deserialize<'de>,
{
let result = bincode::deserialize_from(self.builder.reader()?)?;
Ok(result)
}
fn save<T>(&self, value: &T) -> Result<()>
where
T: serde::ser::Serialize,
{
bincode::serialize_into(self.builder.writer()?, value)?;
Ok(())
}
}