Skip to main content

classy_sync/data_stores/
replicate_datastore.rs

1use crate::argument_parser::SyncResources;
2
3use super::sync_requests::{AllSyncResult, SelectSync, SyncOptions, TermSyncResult};
4use crate::errors::Error;
5
6/// Datastores may choose to make it possible to have all syncs / schools syncs /term syncs work
7/// with each other, but they may also choose to make some of them mutaully exclusive
8pub trait Datastore {
9    fn set_request_sync_resources(&mut self, resources: SyncResources) -> Result<(), Error>;
10    fn unset_request_sync_resources(&mut self, resources: SyncResources) -> Result<(), Error>;
11    fn generate_sync_options(&mut self) -> Result<SyncOptions, Error>;
12
13    fn execute_all_request_sync(&mut self, all_sync_response: AllSyncResult) -> Result<(), Error>;
14    fn execute_select_request_sync(
15        &mut self,
16        select_sync_request: SelectSync,
17        select_sync_response: TermSyncResult,
18    ) -> Result<(), Error>;
19}
20
21/// gets the datastore that is selected as per the first feature
22pub fn get_datastore() -> Result<Box<dyn Datastore>, Error> {
23    #[cfg(feature = "sqlite")]
24    return Ok(Box::new(super::sqlite::Sqlite::new()?));
25
26    #[allow(unreachable_code)]
27    {
28        unreachable!("A data store backend feature must be enabled at compile time.")
29    }
30}