Skip to main content

bitwarden_vault/folder/
get_list.rs

1use 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, FolderId, 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    Repository(#[from] RepositoryError),
19}
20
21pub(super) async fn get_folder(
22    store: &KeyStore<KeyIds>,
23    repository: &dyn Repository<Folder>,
24    id: FolderId,
25) -> Result<FolderView, GetFolderError> {
26    let folder = repository.get(id).await?.ok_or(ItemNotFoundError)?;
27
28    Ok(store.decrypt(&folder)?)
29}
30
31pub(super) async fn list_folders(
32    store: &KeyStore<KeyIds>,
33    repository: &dyn Repository<Folder>,
34) -> Result<Vec<FolderView>, GetFolderError> {
35    let folders = repository.list().await?;
36    let views = store.decrypt_list(&folders)?;
37    Ok(views)
38}