63 lines
1.9 KiB
Rust
63 lines
1.9 KiB
Rust
use {
|
|
solana_sdk::{transaction::TransactionError, transport::TransportError},
|
|
std::io,
|
|
tarpc::client::RpcError,
|
|
thiserror::Error,
|
|
};
|
|
|
|
/// Errors from BanksClient
|
|
#[derive(Error, Debug)]
|
|
pub enum BanksClientError {
|
|
#[error("client error: {0}")]
|
|
ClientError(&'static str),
|
|
|
|
#[error(transparent)]
|
|
Io(#[from] io::Error),
|
|
|
|
#[error(transparent)]
|
|
RpcError(#[from] RpcError),
|
|
|
|
#[error("transport transaction error: {0}")]
|
|
TransactionError(#[from] TransactionError),
|
|
}
|
|
|
|
impl BanksClientError {
|
|
pub fn unwrap(&self) -> TransactionError {
|
|
if let BanksClientError::TransactionError(err) = self {
|
|
err.clone()
|
|
} else {
|
|
panic!("unexpected transport error")
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<BanksClientError> for io::Error {
|
|
fn from(err: BanksClientError) -> Self {
|
|
match err {
|
|
BanksClientError::ClientError(err) => Self::new(io::ErrorKind::Other, err.to_string()),
|
|
BanksClientError::Io(err) => err,
|
|
BanksClientError::RpcError(err) => Self::new(io::ErrorKind::Other, err.to_string()),
|
|
BanksClientError::TransactionError(err) => {
|
|
Self::new(io::ErrorKind::Other, err.to_string())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<BanksClientError> for TransportError {
|
|
fn from(err: BanksClientError) -> Self {
|
|
match err {
|
|
BanksClientError::ClientError(err) => {
|
|
Self::IoError(io::Error::new(io::ErrorKind::Other, err.to_string()))
|
|
}
|
|
BanksClientError::Io(err) => {
|
|
Self::IoError(io::Error::new(io::ErrorKind::Other, err.to_string()))
|
|
}
|
|
BanksClientError::RpcError(err) => {
|
|
Self::IoError(io::Error::new(io::ErrorKind::Other, err.to_string()))
|
|
}
|
|
BanksClientError::TransactionError(err) => Self::TransactionError(err),
|
|
}
|
|
}
|
|
}
|