34 lines
678 B
Rust
34 lines
678 B
Rust
|
use std::{fs, io::Write, path::PathBuf};
|
||
|
|
||
|
use eyre::Result;
|
||
|
|
||
|
pub trait Database {
|
||
|
fn save_checkpoint(&self, checkpoint: Vec<u8>) -> 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<u8>) -> 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(())
|
||
|
}
|
||
|
}
|