mod account;
mod block;
mod note;
mod sync;
mod transaction;
pub use account::GetAccountError;
pub use block::{GetBlockByNumberError, GetBlockHeaderError};
pub use note::{CheckNullifiersError, GetNoteScriptByRootError, GetNotesByIdError};
pub use sync::{
NoteSyncError,
SyncAccountStorageMapsError,
SyncAccountVaultError,
SyncNullifiersError,
SyncTransactionsError,
};
use thiserror::Error;
pub use transaction::AddTransactionError;
use crate::rpc::RpcEndpoint;
#[derive(Debug, Clone, PartialEq, Eq, Error)]
pub enum EndpointError {
#[error(transparent)]
AddTransaction(#[from] AddTransactionError),
#[error(transparent)]
GetBlockHeader(#[from] GetBlockHeaderError),
#[error(transparent)]
GetBlockByNumber(#[from] GetBlockByNumberError),
#[error(transparent)]
NoteSync(#[from] NoteSyncError),
#[error(transparent)]
SyncNullifiers(#[from] SyncNullifiersError),
#[error(transparent)]
SyncAccountVault(#[from] SyncAccountVaultError),
#[error(transparent)]
SyncStorageMaps(#[from] SyncAccountStorageMapsError),
#[error(transparent)]
SyncTransactions(#[from] SyncTransactionsError),
#[error(transparent)]
GetNotesById(#[from] GetNotesByIdError),
#[error(transparent)]
GetNoteScriptByRoot(#[from] GetNoteScriptByRootError),
#[error(transparent)]
CheckNullifiers(#[from] CheckNullifiersError),
#[error(transparent)]
GetAccount(#[from] GetAccountError),
}
pub fn parse_node_error(
endpoint: &RpcEndpoint,
details: &[u8],
message: &str,
) -> Option<EndpointError> {
let code = *details.first()?;
match endpoint {
RpcEndpoint::SubmitProvenTx => {
Some(EndpointError::AddTransaction(AddTransactionError::from_code(code, message)))
},
RpcEndpoint::GetBlockHeaderByNumber => {
Some(EndpointError::GetBlockHeader(GetBlockHeaderError::from_code(code, message)))
},
RpcEndpoint::GetBlockByNumber => {
Some(EndpointError::GetBlockByNumber(GetBlockByNumberError::from_code(code, message)))
},
RpcEndpoint::SyncNotes => {
Some(EndpointError::NoteSync(NoteSyncError::from_code(code, message)))
},
RpcEndpoint::SyncNullifiers => {
Some(EndpointError::SyncNullifiers(SyncNullifiersError::from_code(code, message)))
},
RpcEndpoint::SyncAccountVault => {
Some(EndpointError::SyncAccountVault(SyncAccountVaultError::from_code(code, message)))
},
RpcEndpoint::SyncStorageMaps => Some(EndpointError::SyncStorageMaps(
SyncAccountStorageMapsError::from_code(code, message),
)),
RpcEndpoint::SyncTransactions => {
Some(EndpointError::SyncTransactions(SyncTransactionsError::from_code(code, message)))
},
RpcEndpoint::GetNotesById => {
Some(EndpointError::GetNotesById(GetNotesByIdError::from_code(code, message)))
},
RpcEndpoint::GetNoteScriptByRoot => Some(EndpointError::GetNoteScriptByRoot(
GetNoteScriptByRootError::from_code(code, message),
)),
RpcEndpoint::CheckNullifiers => {
Some(EndpointError::CheckNullifiers(CheckNullifiersError::from_code(code, message)))
},
RpcEndpoint::GetAccount => {
Some(EndpointError::GetAccount(GetAccountError::from_code(code, message)))
},
RpcEndpoint::SyncChainMmr | RpcEndpoint::Status | RpcEndpoint::GetLimits => None,
}
}