bitwarden_vault/folder/
folder_client.rs1use std::sync::Arc;
2
3use bitwarden_core::Client;
4use bitwarden_state::repository::{Repository, RepositoryError};
5#[cfg(feature = "wasm")]
6use wasm_bindgen::prelude::*;
7
8use crate::{
9 CreateFolderError, EditFolderError, Folder, FolderAddEditRequest, FolderId, FolderView,
10 GetFolderError,
11 error::{DecryptError, EncryptError},
12 folder::{create_folder, edit_folder, get_folder, list_folders},
13};
14
15#[cfg_attr(feature = "wasm", wasm_bindgen)]
17pub struct FoldersClient {
18 pub(crate) client: Client,
19}
20
21#[cfg_attr(feature = "wasm", wasm_bindgen)]
22impl FoldersClient {
23 pub fn encrypt(&self, folder_view: FolderView) -> Result<Folder, EncryptError> {
25 let key_store = self.client.internal.get_key_store();
26 let folder = key_store.encrypt(folder_view)?;
27 Ok(folder)
28 }
29
30 pub fn decrypt(&self, folder: Folder) -> Result<FolderView, DecryptError> {
32 let key_store = self.client.internal.get_key_store();
33 let folder_view = key_store.decrypt(&folder)?;
34 Ok(folder_view)
35 }
36
37 pub fn decrypt_list(&self, folders: Vec<Folder>) -> Result<Vec<FolderView>, DecryptError> {
39 let key_store = self.client.internal.get_key_store();
40 let views = key_store.decrypt_list(&folders)?;
41 Ok(views)
42 }
43
44 pub async fn list(&self) -> Result<Vec<FolderView>, GetFolderError> {
46 let key_store = self.client.internal.get_key_store();
47 let repository = self.get_repository()?;
48
49 list_folders(key_store, repository.as_ref()).await
50 }
51
52 pub async fn get(&self, folder_id: FolderId) -> Result<FolderView, GetFolderError> {
54 let key_store = self.client.internal.get_key_store();
55 let repository = self.get_repository()?;
56
57 get_folder(key_store, repository.as_ref(), folder_id).await
58 }
59
60 pub async fn create(
62 &self,
63 request: FolderAddEditRequest,
64 ) -> Result<FolderView, CreateFolderError> {
65 let key_store = self.client.internal.get_key_store();
66 let config = self.client.internal.get_api_configurations().await;
67 let repository = self.get_repository()?;
68
69 create_folder(key_store, &config.api_client, repository.as_ref(), request).await
70 }
71
72 pub async fn edit(
74 &self,
75 folder_id: FolderId,
76 request: FolderAddEditRequest,
77 ) -> Result<FolderView, EditFolderError> {
78 let key_store = self.client.internal.get_key_store();
79 let config = self.client.internal.get_api_configurations().await;
80 let repository = self.get_repository()?;
81
82 edit_folder(
83 key_store,
84 &config.api_client,
85 repository.as_ref(),
86 folder_id,
87 request,
88 )
89 .await
90 }
91}
92
93impl FoldersClient {
94 fn get_repository(&self) -> Result<Arc<dyn Repository<Folder>>, RepositoryError> {
96 Ok(self
97 .client
98 .platform()
99 .state()
100 .get_client_managed::<Folder>()?)
101 }
102}