sim_lib_journal/
backend.rs1use crate::{JournalEntry, JournalError, JournalHead, JournalObject, Lease, StoredDatumRef};
2use sim_kernel::{ContentId, Datum};
3use std::collections::BTreeMap;
4use std::sync::Arc;
5
6#[derive(Clone, Debug, Default)]
8pub struct StoredState {
9 pub objects: BTreeMap<ContentId, Vec<u8>>,
10 pub datums: BTreeMap<ContentId, Datum>,
12 pub entries: BTreeMap<u64, JournalEntry>,
13 pub head: Option<JournalHead>,
14}
15
16pub struct Admission {
19 pub fence: u64,
20 pub expected: Option<JournalHead>,
21 pub objects: Vec<JournalObject>,
22 pub entries: Vec<JournalEntry>,
23}
24
25pub trait JournalBackend: Send + Sync {
28 fn acquire_lease(&self) -> Result<Lease, JournalError>;
29 fn read_state(&self) -> Result<StoredState, JournalError>;
30 fn admit(&self, admission: Admission) -> Result<JournalHead, JournalError>;
31 fn put_datum(&self, object: JournalObject) -> Result<StoredDatumRef, JournalError>;
34 fn get_datum(&self, meaning: &ContentId) -> Result<Datum, JournalError>;
36 fn rebuild_datum_index(&self) -> Result<Vec<StoredDatumRef>, JournalError>;
38}
39
40impl<T: JournalBackend + ?Sized> JournalBackend for Arc<T> {
41 fn acquire_lease(&self) -> Result<Lease, JournalError> {
42 (**self).acquire_lease()
43 }
44 fn read_state(&self) -> Result<StoredState, JournalError> {
45 (**self).read_state()
46 }
47 fn admit(&self, admission: Admission) -> Result<JournalHead, JournalError> {
48 (**self).admit(admission)
49 }
50 fn put_datum(&self, object: JournalObject) -> Result<StoredDatumRef, JournalError> {
51 (**self).put_datum(object)
52 }
53 fn get_datum(&self, meaning: &ContentId) -> Result<Datum, JournalError> {
54 (**self).get_datum(meaning)
55 }
56 fn rebuild_datum_index(&self) -> Result<Vec<StoredDatumRef>, JournalError> {
57 (**self).rebuild_datum_index()
58 }
59}