coven_database/
database_mode.rs1use super::file_database::FileDatabase;
6
7mod sealed {
8 use crate::database::{file_database::FileDatabase, DatabaseAccess};
9
10 pub trait Sealed: Sized {
12 type Open: Send + Sync + 'static;
14 type Lock: Send + Sync + 'static;
16 type WriterParts: Clone + Send + Sync + 'static;
18
19 fn access(open: &Self::Open) -> &DatabaseAccess<Self::Lock>;
21
22 fn records(files: &FileDatabase<Self>) -> Option<&FileDatabase<super::Writer>>
25 where
26 Self: super::Mode;
27 }
28}
29
30pub trait Mode: sealed::Sealed + Send + Sync + 'static {}
32
33pub enum Writer {}
36
37pub enum ReadOnly {}
40
41impl Mode for Writer {}
42impl Mode for ReadOnly {}
43
44impl sealed::Sealed for Writer {
45 type Open = super::DatabaseInner;
46 type Lock = coven_foundation::files::StoreLock;
47 type WriterParts = super::WriterParts;
48
49 fn access(open: &super::DatabaseInner) -> &super::DatabaseAccess<Self::Lock> {
50 &open.access
51 }
52
53 fn records(files: &FileDatabase<Self>) -> Option<&FileDatabase<Writer>> {
54 Some(files)
55 }
56}
57
58impl sealed::Sealed for ReadOnly {
59 type Open = super::DatabaseAccess<Self::Lock>;
60 type Lock = coven_foundation::files::StoreReadLock;
61 type WriterParts = ();
62
63 fn access(open: &Self::Open) -> &Self::Open {
64 open
65 }
66
67 fn records(_: &FileDatabase<Self>) -> Option<&FileDatabase<Writer>> {
68 None
69 }
70}