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