Skip to main content

bitwarden_vault/folder/
folder_client.rs

1use std::sync::Arc;
2
3use bitwarden_core::{FromClient, client::ApiConfigurations, key_management::KeySlotIds};
4use bitwarden_crypto::KeyStore;
5use bitwarden_state::repository::Repository;
6
7use crate::{
8    Folder, FolderView,
9    error::{DecryptError, EncryptError},
10};
11
12/// Wrapper for folder specific functionality.
13#[bitwarden_ffi::wasm_object]
14#[derive(FromClient)]
15pub struct FoldersClient {
16    pub(crate) key_store: KeyStore<KeySlotIds>,
17    pub(crate) api_configurations: Arc<ApiConfigurations>,
18    pub(crate) repository: Option<Arc<dyn Repository<Folder>>>,
19}
20
21#[bitwarden_ffi::wasm_export]
22#[deprecated(
23    note = "Use the higher level `FoldersClient` methods instead, which handle encryption and decryption for you."
24)]
25impl FoldersClient {
26    /// Encrypt a [FolderView] to a [Folder].
27    pub fn encrypt(&self, folder_view: FolderView) -> Result<Folder, EncryptError> {
28        let folder = self.key_store.encrypt(folder_view)?;
29        Ok(folder)
30    }
31
32    /// Decrypt a [Folder] to [FolderView].
33    pub fn decrypt(&self, folder: Folder) -> Result<FolderView, DecryptError> {
34        let folder_view = self.key_store.decrypt(&folder)?;
35        Ok(folder_view)
36    }
37
38    /// Decrypt a list of [Folder]s to a list of [FolderView]s.
39    pub fn decrypt_list(&self, folders: Vec<Folder>) -> Result<Vec<FolderView>, DecryptError> {
40        let views = self.key_store.decrypt_list(&folders)?;
41        Ok(views)
42    }
43}