use crate::Result;
use crate::RwBuilder;
use wincode::io::{std_read::ReadAdapter, std_write::WriteAdapter, Writer};
#[derive(Debug)]
#[must_use]
pub struct Builder<B>
where
B: RwBuilder,
{
builder: B,
}
impl<B> Builder<B>
where
B: RwBuilder,
{
pub const fn new(builder: B) -> Self {
Self { builder }
}
pub fn load<T>(&self) -> Result<T>
where
T: for<'de> serde::de::Deserialize<'de>
+ for<'de> wincode::SchemaRead<'de, wincode::config::DefaultConfig, Dst = T>,
{
let reader = self.builder.reader()?;
let adapter = ReadAdapter::new(reader);
let result = wincode::deserialize_from(adapter)?;
Ok(result)
}
pub fn save<T>(&self, value: &T) -> Result<()>
where
T: serde::ser::Serialize
+ wincode::SchemaWrite<wincode::config::DefaultConfig, Src = T>
+ ?Sized,
{
let writer = self.builder.writer()?;
let mut adapter = WriteAdapter::new(writer);
wincode::serialize_into(&mut adapter, value)?;
adapter.finish()?;
Ok(())
}
}