diff --git a/crates/bitwarden-vault/src/folder/edit.rs b/crates/bitwarden-vault/src/folder/edit.rs index d5ad9a8d3..e4340c207 100644 --- a/crates/bitwarden-vault/src/folder/edit.rs +++ b/crates/bitwarden-vault/src/folder/edit.rs @@ -7,7 +7,9 @@ use thiserror::Error; #[cfg(feature = "wasm")] use wasm_bindgen::prelude::*; -use crate::{Folder, FolderAddEditRequest, FolderView, ItemNotFoundError, VaultParseError}; +use crate::{ + Folder, FolderAddEditRequest, FolderId, FolderView, ItemNotFoundError, VaultParseError, +}; #[allow(missing_docs)] #[bitwarden_error(flat)] @@ -33,28 +35,25 @@ pub(super) async fn edit_folder + ?Sized>( key_store: &KeyStore, api_config: &bitwarden_api_api::apis::configuration::Configuration, repository: &R, - folder_id: &str, + folder_id: FolderId, request: FolderAddEditRequest, ) -> Result { + let id = folder_id.to_string(); + // Verify the folder we're updating exists - repository - .get(folder_id.to_owned()) - .await? - .ok_or(ItemNotFoundError)?; + repository.get(id.clone()).await?.ok_or(ItemNotFoundError)?; let folder_request = key_store.encrypt(request)?; - let resp = folders_api::folders_put(api_config, folder_id, Some(folder_request)) + let resp = folders_api::folders_put(api_config, &id, Some(folder_request)) .await .map_err(ApiError::from)?; let folder: Folder = resp.try_into()?; - debug_assert!(folder.id.unwrap_or_default().to_string() == folder_id); + debug_assert!(folder.id.unwrap_or_default() == folder_id); - repository - .set(folder_id.to_string(), folder.clone()) - .await?; + repository.set(id, folder.clone()).await?; Ok(key_store.decrypt(&folder)?) } @@ -129,7 +128,7 @@ mod tests { &store, &api_config, &repository, - &folder_id.to_string(), + folder_id, FolderAddEditRequest { name: "test".to_string(), }, @@ -152,13 +151,13 @@ mod tests { let store: KeyStore = KeyStore::default(); let repository = MemoryRepository::::default(); - let folder_id = uuid!("25afb11c-9c95-4db5-8bac-c21cb204a3f1"); + let folder_id = FolderId::new(uuid!("25afb11c-9c95-4db5-8bac-c21cb204a3f1")); let result = edit_folder( &store, &Configuration::default(), &repository, - &folder_id.to_string(), + folder_id, FolderAddEditRequest { name: "test".to_string(), }, @@ -197,7 +196,7 @@ mod tests { &store, &api_config, &repository, - &folder_id.to_string(), + folder_id, FolderAddEditRequest { name: "test".to_string(), }, diff --git a/crates/bitwarden-vault/src/folder/folder_client.rs b/crates/bitwarden-vault/src/folder/folder_client.rs index 63370bab6..1e7d15667 100644 --- a/crates/bitwarden-vault/src/folder/folder_client.rs +++ b/crates/bitwarden-vault/src/folder/folder_client.rs @@ -8,7 +8,8 @@ use wasm_bindgen::prelude::*; use crate::{ error::{DecryptError, EncryptError}, folder::{create_folder, edit_folder, get_folder, list_folders}, - CreateFolderError, EditFolderError, Folder, FolderAddEditRequest, FolderView, GetFolderError, + CreateFolderError, EditFolderError, Folder, FolderAddEditRequest, FolderId, FolderView, + GetFolderError, }; /// Wrapper for folder specific functionality. @@ -49,7 +50,7 @@ impl FoldersClient { } /// Get a specific [Folder] by its ID from state and decrypt it to a [FolderView]. - pub async fn get(&self, folder_id: &str) -> Result { + pub async fn get(&self, folder_id: FolderId) -> Result { let key_store = self.client.internal.get_key_store(); let repository = self.get_repository()?; @@ -71,7 +72,7 @@ impl FoldersClient { /// Edit the [Folder] and save it to the server. pub async fn edit( &self, - folder_id: &str, + folder_id: FolderId, request: FolderAddEditRequest, ) -> Result { let key_store = self.client.internal.get_key_store(); diff --git a/crates/bitwarden-vault/src/folder/get_list.rs b/crates/bitwarden-vault/src/folder/get_list.rs index 385d6065a..2cb58afe2 100644 --- a/crates/bitwarden-vault/src/folder/get_list.rs +++ b/crates/bitwarden-vault/src/folder/get_list.rs @@ -4,7 +4,7 @@ use bitwarden_error::bitwarden_error; use bitwarden_state::repository::{Repository, RepositoryError}; use thiserror::Error; -use crate::{Folder, FolderView, ItemNotFoundError}; +use crate::{Folder, FolderId, FolderView, ItemNotFoundError}; #[allow(missing_docs)] #[bitwarden_error(flat)] @@ -21,7 +21,7 @@ pub enum GetFolderError { pub(super) async fn get_folder( store: &KeyStore, repository: &dyn Repository, - id: &str, + id: FolderId, ) -> Result { let folder = repository .get(id.to_string())