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