solana-shadow 0.2.4

Synchronized shadow state of Solana programs available for off-chain processing.
Documentation
use solana_client::client_error::ClientError;
use solana_sdk::pubkey::ParsePubkeyError;
use thiserror::Error;
use tokio::sync::oneshot::error::RecvError;
use tokio::task::JoinError;
use tokio::time::error::Elapsed;
use tokio_tungstenite::tungstenite::Error as WsError;

#[derive(Debug, Error)]
pub enum Error {
  #[error("Expected a program account")]
  NotAProgramAccount,

  #[error("Invalid Argument")]
  InvalidArguemt,

  #[error("Background worker is dead")]
  WorkerDead,

  #[error("Solana RPC error")]
  SolanaClientError(#[from] ClientError),

  #[error("WebSocket error")]
  WebSocketError(#[from] WsError),

  #[error("AsyncWrap error")]
  AsyncWrapError(#[from] RecvError),

  #[error("AsyncTimeout error")]
  AsyncTimeoutError(#[from] Elapsed),

  #[error("Notification for an unknown subscription")]
  UnknownSubscription,

  #[error("Unsupported RPC message format")]
  UnsupportedRpcFormat,

  #[error("Internal error")]
  InternalError,

  #[error("Invalid JSON-RPC message")]
  InvalidRpcMessage(#[from] serde_json::Error),

  #[error("Failed to parse public key")]
  InvalidPublicKey(#[from] ParsePubkeyError),

  #[error("Failed to parse base64 data")]
  InvalidBase64Data(#[from] base64::DecodeError),

  #[error("Internal synchronization error")]
  InternalSynchronizationError(#[from] JoinError),
}

pub type Result<T> = std::result::Result<T, Error>;