diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..dcb6304 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,41 @@ +use std::fmt; +use std::error::Error; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub enum AnkError { + GenericError(String), + FaucetError(String), + NewTxError(String), + CipherError(String), +} + +impl fmt::Display for AnkError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + AnkError::GenericError(msg) => write!(f, "GenericError: {}", msg), + AnkError::FaucetError(msg) => write!(f, "FaucetError: {}", msg), + AnkError::NewTxError(msg) => write!(f, "NewTxError: {}", msg), + AnkError::CipherError(msg) => write!(f, "CipherError: {}", msg), + } + } +} + +impl Error for AnkError {} + +impl From for AnkError { + fn from(error: anyhow::Error) -> Self { + let error_message = error.to_string(); + + if error_message.contains("FaucetError") { + AnkError::FaucetError(error_message) + } else if error_message.contains("NewTxError") { + AnkError::NewTxError(error_message) + } else if error_message.contains("CipherError") { + AnkError::CipherError(error_message) + } else { + AnkError::GenericError(error_message) + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 48fa577..2bdb1ee 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ pub mod crypto; pub mod network; pub mod silentpayments; +pub mod error; diff --git a/src/network.rs b/src/network.rs index a0afe21..8116625 100644 --- a/src/network.rs +++ b/src/network.rs @@ -8,6 +8,7 @@ use sp_client::silentpayments::bitcoin_hashes::{sha256t_hash_newtype, Hash, Hash use tsify::Tsify; use crate::crypto::{Aes256Decryption, CipherText, Purpose}; +use crate::error::AnkError; const RAWTXTOPIC: &'static str = "rawtx"; const RAWBLOCKTOPIC: &'static str = "rawblock";