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, 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}