use std::{fs, io::Write, path::PathBuf}; use eyre::Result; pub trait Database { fn save_checkpoint(&self, checkpoint: Vec) -> Result<()>; } pub struct FileDB { data_dir: PathBuf, } impl FileDB { pub fn new(data_dir: PathBuf) -> Self { FileDB { data_dir } } } impl Database for FileDB { fn save_checkpoint(&self, checkpoint: Vec) -> Result<()> { fs::create_dir_all(&self.data_dir)?; let mut f = fs::OpenOptions::new() .write(true) .create(true) .truncate(true) .open(self.data_dir.join("checkpoint"))?; f.write_all(checkpoint.as_slice())?; Ok(()) } }