mdbook_journal/journal/persistence/traits/
persistence.rs1use crate::prelude::*;
2
3#[derive(Debug)]
4pub enum Query<'a> {
5 ForTopic(&'a Topic),
7 AllEntries,
9}
10
11pub trait PersistenceTrait {
12 type Serialized;
13
14 fn persist(&self, path: &Path, data: &Self::Serialized) -> Result<()>;
15
16 fn load(&self, path: &Path) -> Result<(PathBuf, Self::Serialized)>;
17
18 fn serialize(&self, entry: &Entry) -> Result<Self::Serialized>;
19
20 fn deserialize(&self, data: Self::Serialized) -> Result<Entry>;
21
22 fn execute(&self, query: &Query) -> Result<Vec<(PathBuf, Self::Serialized)>>;
23
24 fn fetch(&self, path: &Path) -> Result<Entry> {
25 let (file_path, data) = self.load(path)?;
26 let mut entry = self.deserialize(data)?;
27 entry.file_loc = Some(file_path);
28 Ok(entry)
29 }
30
31 fn query(&self, query: &Query) -> Result<Vec<Entry>> {
32 self.execute(query)?
33 .into_iter()
34 .try_fold(vec![], |mut items, (path, data)| {
35 let mut entry = self.deserialize(data)?;
36 entry.file_loc = Some(path);
37 items.push(entry);
38 Ok(items)
39 })
40 }
41}