error.rs (2433B)
1 use thiserror::Error; 2 3 #[derive(Debug, Error)] 4 pub enum RadrootsNostrAccountsError { 5 #[error("identity error: {0}")] 6 Identity(String), 7 8 #[error("store error: {0}")] 9 Store(String), 10 11 #[error("vault error: {0}")] 12 Vault(String), 13 14 #[error("account not found: {0}")] 15 AccountNotFound(String), 16 17 #[error("account already exists: {0}")] 18 AccountAlreadyExists(String), 19 20 #[error("invalid account state: {0}")] 21 InvalidState(String), 22 23 #[error("invalid account selector: {0}")] 24 InvalidAccountSelector(String), 25 26 #[error("account selector is ambiguous: {0}")] 27 AmbiguousAccountSelector(String), 28 29 #[error("public key does not match secret key")] 30 PublicKeyMismatch, 31 } 32 33 #[cfg(feature = "std")] 34 impl From<radroots_identity::IdentityError> for RadrootsNostrAccountsError { 35 fn from(value: radroots_identity::IdentityError) -> Self { 36 Self::Identity(value.to_string()) 37 } 38 } 39 40 #[cfg(feature = "std")] 41 impl From<radroots_runtime::RuntimeJsonError> for RadrootsNostrAccountsError { 42 fn from(value: radroots_runtime::RuntimeJsonError) -> Self { 43 Self::Store(value.to_string()) 44 } 45 } 46 47 #[cfg(feature = "std")] 48 impl From<radroots_secret_vault::RadrootsSecretVaultAccessError> for RadrootsNostrAccountsError { 49 fn from(value: radroots_secret_vault::RadrootsSecretVaultAccessError) -> Self { 50 Self::Vault(value.to_string()) 51 } 52 } 53 54 #[cfg(test)] 55 mod tests { 56 use super::*; 57 use radroots_identity::IdentityError; 58 use radroots_runtime::RuntimeJsonError; 59 use radroots_secret_vault::RadrootsSecretVaultAccessError; 60 use std::path::PathBuf; 61 62 #[test] 63 fn converts_identity_error() { 64 let source = IdentityError::PublicKeyMismatch; 65 let converted: RadrootsNostrAccountsError = source.into(); 66 assert!(converted.to_string().starts_with("identity error:")); 67 } 68 69 #[test] 70 fn converts_runtime_json_error() { 71 let source = RuntimeJsonError::NotFound(PathBuf::from("accounts.json")); 72 let converted: RadrootsNostrAccountsError = source.into(); 73 assert!(converted.to_string().starts_with("store error:")); 74 } 75 76 #[test] 77 fn converts_secret_vault_access_error() { 78 let source = RadrootsSecretVaultAccessError::Backend("vault failed".into()); 79 let converted: RadrootsNostrAccountsError = source.into(); 80 assert!(converted.to_string().starts_with("vault error:")); 81 } 82 }