use std::{
borrow::Cow,
fs::File,
io::{BufWriter, Write},
path::PathBuf,
sync::Arc,
};
use serde::{Deserialize, Serialize};
use super::{driver::Driver, Item};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct JsonConfig {
file: PathBuf,
}
pub struct JsonDriver {
file: BufWriter<File>,
}
impl JsonDriver {
pub fn new(config: &JsonConfig) -> std::io::Result<Self> {
Ok(Self {
file: BufWriter::new(File::create(&config.file)?),
})
}
}
impl Driver for JsonDriver {
fn name(&self) -> Cow<'static, str> {
Cow::from("json")
}
fn write(&mut self, item: &Arc<Item>) {
serde_json::to_writer_pretty(&mut self.file, item).unwrap(); }
fn flush(&mut self) {
let _ = self.file.flush();
}
}