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 error::{DecryptError, EncryptError},
10 folder::{create_folder, edit_folder, get_folder, list_folders},
11 CreateFolderError, EditFolderError, Folder, FolderAddEditRequest, FolderView, GetFolderError,
12};
13
14#[cfg_attr(feature = "wasm", wasm_bindgen)]
16pub struct FoldersClient {
17 pub(crate) client: Client,
18}
19
20#[cfg_attr(feature = "wasm", wasm_bindgen)]
21impl FoldersClient {
22 pub fn encrypt(&self, folder_view: FolderView) -> Result<Folder, EncryptError> {
24 let key_store = self.client.internal.get_key_store();
25 let folder = key_store.encrypt(folder_view)?;
26 Ok(folder)
27 }
28
29 pub fn decrypt(&self, folder: Folder) -> Result<FolderView, DecryptError> {
31 let key_store = self.client.internal.get_key_store();
32 let folder_view = key_store.decrypt(&folder)?;
33 Ok(folder_view)
34 }
35
36 pub fn decrypt_list(&self, folders: Vec<Folder>) -> Result<Vec<FolderView>, DecryptError> {
38 let key_store = self.client.internal.get_key_store();
39 let views = key_store.decrypt_list(&folders)?;
40 Ok(views)
41 }
42
43 pub async fn list(&self) -> Result<Vec<FolderView>, GetFolderError> {
45 let key_store = self.client.internal.get_key_store();
46 let repository = self.get_repository()?;
47
48 list_folders(key_store, repository.as_ref()).await
49 }
50
51 pub async fn get(&self, folder_id: &str) -> Result<FolderView, GetFolderError> {
53 let key_store = self.client.internal.get_key_store();
54 let repository = self.get_repository()?;
55
56 get_folder(key_store, repository.as_ref(), folder_id).await
57 }
58
59 pub async fn create(
61 &self,
62 request: FolderAddEditRequest,
63 ) -> Result<FolderView, CreateFolderError> {
64 let key_store = self.client.internal.get_key_store();
65 let config = self.client.internal.get_api_configurations().await;
66 let repository = self.get_repository()?;
67
68 create_folder(key_store, &config.api, repository.as_ref(), request).await
69 }
70
71 pub async fn edit(
73 &self,
74 folder_id: &str,
75 request: FolderAddEditRequest,
76 ) -> Result<FolderView, EditFolderError> {
77 let key_store = self.client.internal.get_key_store();
78 let config = self.client.internal.get_api_configurations().await;
79 let repository = self.get_repository()?;
80
81 edit_folder(
82 key_store,
83 &config.api,
84 repository.as_ref(),
85 folder_id,
86 request,
87 )
88 .await
89 }
90}
91
92impl FoldersClient {
93 fn get_repository(&self) -> Result<Arc<dyn Repository<Folder>>, RepositoryError> {
95 Ok(self
96 .client
97 .platform()
98 .state()
99 .get_client_managed::<Folder>()?)
100 }
101}