1use crate::Result;
2
3use crate::RwBuilder;
4use wincode::io::{std_read::ReadAdapter, std_write::WriteAdapter, Writer};
5
6#[derive(Debug)]
14#[must_use]
15pub struct Builder<B>
16where
17 B: RwBuilder,
18{
19 builder: B,
21}
22
23impl<B> Builder<B>
24where
25 B: RwBuilder,
26{
27 pub const fn new(builder: B) -> Self {
29 Self { builder }
30 }
31
32 pub fn load<T>(&self) -> Result<T>
37 where
38 T: for<'de> serde::de::Deserialize<'de>
39 + for<'de> wincode::SchemaRead<'de, wincode::config::DefaultConfig, Dst = T>,
40 {
41 let reader = self.builder.reader()?;
42 let adapter = ReadAdapter::new(reader);
43 let result = wincode::deserialize_from(adapter)?;
44 Ok(result)
45 }
46
47 pub fn save<T>(&self, value: &T) -> Result<()>
52 where
53 T: serde::ser::Serialize
54 + wincode::SchemaWrite<wincode::config::DefaultConfig, Src = T>
55 + ?Sized,
56 {
57 let writer = self.builder.writer()?;
58 let mut adapter = WriteAdapter::new(writer);
59 wincode::serialize_into(&mut adapter, value)?;
60 adapter.finish()?;
61 Ok(())
62 }
63}