solana_banks_client/
error.rs1use {
2 solana_sdk::{transaction::TransactionError, transport::TransportError},
3 solana_transaction_context::TransactionReturnData,
4 std::io,
5 tarpc::client::RpcError,
6 thiserror::Error,
7};
8
9#[derive(Error, Debug)]
11pub enum BanksClientError {
12 #[error("client error: {0}")]
13 ClientError(&'static str),
14
15 #[error(transparent)]
16 Io(#[from] io::Error),
17
18 #[error(transparent)]
19 RpcError(#[from] RpcError),
20
21 #[error("transport transaction error: {0}")]
22 TransactionError(#[from] TransactionError),
23
24 #[error("simulation error: {err:?}, logs: {logs:?}, units_consumed: {units_consumed:?}")]
25 SimulationError {
26 err: TransactionError,
27 logs: Vec<String>,
28 units_consumed: u64,
29 return_data: Option<TransactionReturnData>,
30 },
31}
32
33impl BanksClientError {
34 pub fn unwrap(&self) -> TransactionError {
35 match self {
36 BanksClientError::TransactionError(err)
37 | BanksClientError::SimulationError { err, .. } => err.clone(),
38 _ => panic!("unexpected transport error"),
39 }
40 }
41}
42
43impl From<BanksClientError> for io::Error {
44 fn from(err: BanksClientError) -> Self {
45 match err {
46 BanksClientError::ClientError(err) => Self::new(io::ErrorKind::Other, err.to_string()),
47 BanksClientError::Io(err) => err,
48 BanksClientError::RpcError(err) => Self::new(io::ErrorKind::Other, err.to_string()),
49 BanksClientError::TransactionError(err) => {
50 Self::new(io::ErrorKind::Other, err.to_string())
51 }
52 BanksClientError::SimulationError { err, .. } => {
53 Self::new(io::ErrorKind::Other, err.to_string())
54 }
55 }
56 }
57}
58
59impl From<BanksClientError> for TransportError {
60 fn from(err: BanksClientError) -> Self {
61 match err {
62 BanksClientError::ClientError(err) => {
63 Self::IoError(io::Error::new(io::ErrorKind::Other, err.to_string()))
64 }
65 BanksClientError::Io(err) => {
66 Self::IoError(io::Error::new(io::ErrorKind::Other, err.to_string()))
67 }
68 BanksClientError::RpcError(err) => {
69 Self::IoError(io::Error::new(io::ErrorKind::Other, err.to_string()))
70 }
71 BanksClientError::TransactionError(err) => Self::TransactionError(err),
72 BanksClientError::SimulationError { err, .. } => Self::TransactionError(err),
73 }
74 }
75}