bitwarden_vault/folder/
get_list.rs1use bitwarden_core::key_management::KeyIds;
2use bitwarden_crypto::{CryptoError, KeyStore};
3use bitwarden_error::bitwarden_error;
4use bitwarden_state::repository::{Repository, RepositoryError};
5use thiserror::Error;
6
7use crate::{Folder, FolderView, ItemNotFoundError};
8
9#[allow(missing_docs)]
10#[bitwarden_error(flat)]
11#[derive(Debug, Error)]
12pub enum GetFolderError {
13 #[error(transparent)]
14 ItemNotFound(#[from] ItemNotFoundError),
15 #[error(transparent)]
16 Crypto(#[from] CryptoError),
17 #[error(transparent)]
18 RepositoryError(#[from] RepositoryError),
19}
20
21pub(super) async fn get_folder(
22 store: &KeyStore<KeyIds>,
23 repository: &dyn Repository<Folder>,
24 id: &str,
25) -> Result<FolderView, GetFolderError> {
26 let folder = repository
27 .get(id.to_string())
28 .await?
29 .ok_or(ItemNotFoundError)?;
30
31 Ok(store.decrypt(&folder)?)
32}
33
34pub(super) async fn list_folders(
35 store: &KeyStore<KeyIds>,
36 repository: &dyn Repository<Folder>,
37) -> Result<Vec<FolderView>, GetFolderError> {
38 let folders = repository.list().await?;
39 let views = store.decrypt_list(&folders)?;
40 Ok(views)
41}