sos_server_storage/
traits.rs1use crate::Result;
3use async_trait::async_trait;
4use indexmap::IndexSet;
5use sos_backend::FolderEventLog;
6use sos_core::{
7 device::{DevicePublicKey, TrustedDevice},
8 events::patch::FolderDiff,
9 AccountId, Paths, VaultFlags, VaultId,
10};
11use sos_sync::CreateSet;
12use sos_vault::{Summary, Vault};
13use std::collections::{HashMap, HashSet};
14use std::sync::Arc;
15use tokio::sync::RwLock;
16
17#[async_trait]
19pub trait ServerAccountStorage {
20 fn account_id(&self) -> &AccountId;
22
23 fn list_device_keys(&self) -> HashSet<&DevicePublicKey>;
25
26 fn paths(&self) -> Arc<Paths>;
28
29 fn folders(&self) -> &HashMap<VaultId, Arc<RwLock<FolderEventLog>>>;
31
32 fn folders_mut(
34 &mut self,
35 ) -> &mut HashMap<VaultId, Arc<RwLock<FolderEventLog>>>;
36
37 fn set_devices(&mut self, devices: IndexSet<TrustedDevice>);
39
40 async fn rename_account(&self, name: &str) -> Result<()>;
42
43 async fn read_vault(&self, folder_id: &VaultId) -> Result<Vault>;
45
46 async fn write_vault(&self, vault: &Vault) -> Result<()>;
48
49 async fn write_login_vault(&self, vault: &Vault) -> Result<()>;
56
57 async fn replace_folder(
59 &self,
60 folder_id: &VaultId,
61 diff: &FolderDiff,
62 ) -> Result<(FolderEventLog, Vault)>;
63
64 async fn set_folder_flags(
66 &self,
67 folder_id: &VaultId,
68 flags: VaultFlags,
69 ) -> Result<()>;
70
71 async fn import_account(
80 &mut self,
81 account_data: &CreateSet,
82 ) -> Result<()>;
83
84 async fn load_folders(&mut self) -> Result<Vec<Summary>>;
88
89 async fn import_folder(
96 &mut self,
97 id: &VaultId,
98 buffer: &[u8],
99 ) -> Result<()>;
100
101 async fn rename_folder(&mut self, id: &VaultId, name: &str)
103 -> Result<()>;
104
105 async fn delete_folder(&mut self, id: &VaultId) -> Result<()>;
107
108 async fn delete_account(&mut self) -> Result<()>;
110}