sos_backend/
preferences.rs1use crate::{BackendTarget, Error};
2use async_trait::async_trait;
3use sos_core::{AccountId, PublicIdentity};
4use sos_database::PreferenceProvider as DbPreferenceProvider;
5use sos_filesystem::PreferenceProvider as FsPreferenceProvider;
6use sos_preferences::{
7 CachedPreferences, PreferenceManager, PreferenceStorageProvider,
8 Preferences,
9};
10use std::sync::Arc;
11use tokio::sync::Mutex;
12
13pub struct BackendPreferences(CachedPreferences<Error>);
15
16impl BackendPreferences {
17 pub fn new(target: BackendTarget) -> Self {
19 match target {
20 BackendTarget::FileSystem(paths) => {
21 let provider: PreferenceStorageProvider<Error> =
22 Box::new(FsPreferenceProvider::new(paths));
23 Self(CachedPreferences::new(Arc::new(provider)))
24 }
25 BackendTarget::Database(_, client) => {
26 let provider: PreferenceStorageProvider<Error> =
27 Box::new(DbPreferenceProvider::new(client));
28 Self(CachedPreferences::new(Arc::new(provider)))
29 }
30 }
31 }
32}
33
34#[async_trait]
35impl PreferenceManager for BackendPreferences {
36 type Error = Error;
37
38 async fn load_global_preferences(&mut self) -> Result<(), Self::Error> {
39 self.0.load_global_preferences().await
40 }
41
42 async fn load_account_preferences(
43 &self,
44 accounts: &[PublicIdentity],
45 ) -> Result<(), Self::Error> {
46 self.0.load_account_preferences(accounts).await
47 }
48
49 fn global_preferences(&self) -> Arc<Mutex<Preferences<Self::Error>>> {
50 self.0.global_preferences()
51 }
52
53 async fn account_preferences(
54 &self,
55 account_id: &AccountId,
56 ) -> Option<Arc<Mutex<Preferences<Self::Error>>>> {
57 self.0.account_preferences(account_id).await
58 }
59
60 async fn new_account(
61 &self,
62 account_id: &AccountId,
63 ) -> Result<(), Self::Error> {
64 self.0.new_account(account_id).await
65 }
66}