|
@@ -178,7 +178,7 @@ impl SolClient {
|
|
|
let message = read
|
|
let message = read
|
|
|
.next()
|
|
.next()
|
|
|
.await
|
|
.await
|
|
|
- .ok_or_else(|| Error::TungsteniteError("No more messages".to_string()))?;
|
|
|
|
|
|
|
+ .ok_or_else(|| Error::TungsteniteError)?;
|
|
|
let message = message?;
|
|
let message = message?;
|
|
|
|
|
|
|
|
if let Message::Pong(_) = message.clone() {
|
|
if let Message::Pong(_) = message.clone() {
|
|
@@ -613,36 +613,100 @@ impl Decodable for Pubkey {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-#[derive(Debug, thiserror::Error)]
|
|
|
|
|
|
|
+#[derive(Debug)]
|
|
|
pub enum SolFailed {
|
|
pub enum SolFailed {
|
|
|
- #[error("There is no enough value `{0}`")]
|
|
|
|
|
NotEnoughValue(u64),
|
|
NotEnoughValue(u64),
|
|
|
- #[error("Main Account Has no enough value")]
|
|
|
|
|
MainAccountNotEnoughValue,
|
|
MainAccountNotEnoughValue,
|
|
|
- #[error("Bad Sol Address: `{0}`")]
|
|
|
|
|
BadSolAddress(String),
|
|
BadSolAddress(String),
|
|
|
- #[error("Decode and decode keys error: `{0}`")]
|
|
|
|
|
DecodeAndEncodeError(String),
|
|
DecodeAndEncodeError(String),
|
|
|
- #[error(transparent)]
|
|
|
|
|
- WebSocketError(#[from] tungstenite::Error),
|
|
|
|
|
- #[error("RpcError: `{0}`")]
|
|
|
|
|
|
|
+ WebSocketError(String),
|
|
|
RpcError(String),
|
|
RpcError(String),
|
|
|
- #[error(transparent)]
|
|
|
|
|
- SolClientError(#[from] solana_client::client_error::ClientError),
|
|
|
|
|
- #[error("Received Notification Error: `{0}`")]
|
|
|
|
|
|
|
+ SolClientError(String),
|
|
|
Notification(String),
|
|
Notification(String),
|
|
|
- #[error(transparent)]
|
|
|
|
|
- ProgramError(#[from] solana_sdk::program_error::ProgramError),
|
|
|
|
|
- #[error("Given mint is not valid: `{0}`")]
|
|
|
|
|
|
|
+ ProgramError(String),
|
|
|
MintIsNotValid(String),
|
|
MintIsNotValid(String),
|
|
|
- #[error(transparent)]
|
|
|
|
|
- JsonError(#[from] serde_json::Error),
|
|
|
|
|
- #[error(transparent)]
|
|
|
|
|
- ParseError(#[from] solana_sdk::pubkey::ParsePubkeyError),
|
|
|
|
|
- #[error("Signature Error: `{0}`")]
|
|
|
|
|
- Signature(String),
|
|
|
|
|
- #[error(transparent)]
|
|
|
|
|
- Darkfi(#[from] crate::error::Error),
|
|
|
|
|
|
|
+ JsonError(String),
|
|
|
|
|
+ ParseError(String),
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+impl std::error::Error for SolFailed {}
|
|
|
|
|
+
|
|
|
|
|
+impl std::fmt::Display for SolFailed {
|
|
|
|
|
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
|
|
|
|
+ match self {
|
|
|
|
|
+ SolFailed::NotEnoughValue(i) => {
|
|
|
|
|
+ write!(f, "There is no enough value {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::MainAccountNotEnoughValue => {
|
|
|
|
|
+ write!(f, "Main Account Has no enough value")
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::BadSolAddress(ref err) => {
|
|
|
|
|
+ write!(f, "Bad Sol Address: {}", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::DecodeAndEncodeError(ref err) => {
|
|
|
|
|
+ write!(f, "Decode and decode keys error: {}", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::WebSocketError(i) => {
|
|
|
|
|
+ write!(f, "WebSocket Error: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::RpcError(i) => {
|
|
|
|
|
+ write!(f, "Rpc Error: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::ParseError(i) => {
|
|
|
|
|
+ write!(f, "Parse Error: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::SolClientError(i) => {
|
|
|
|
|
+ write!(f, "Solana Client Error: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::Notification(i) => {
|
|
|
|
|
+ write!(f, "Received Notification Error: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::ProgramError(i) => {
|
|
|
|
|
+ write!(f, "ProgramError Error: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::MintIsNotValid(i) => {
|
|
|
|
|
+ write!(f, "Given mint is not valid: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ SolFailed::JsonError(i) => {
|
|
|
|
|
+ write!(f, "JsonError: {}", i)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+impl From<solana_sdk::pubkey::ParsePubkeyError> for SolFailed {
|
|
|
|
|
+ fn from(err: solana_sdk::pubkey::ParsePubkeyError) -> SolFailed {
|
|
|
|
|
+ SolFailed::ParseError(err.to_string())
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+impl From<tungstenite::Error> for SolFailed {
|
|
|
|
|
+ fn from(err: tungstenite::Error) -> SolFailed {
|
|
|
|
|
+ SolFailed::WebSocketError(err.to_string())
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+impl From<solana_client::client_error::ClientError> for SolFailed {
|
|
|
|
|
+ fn from(err: solana_client::client_error::ClientError) -> SolFailed {
|
|
|
|
|
+ SolFailed::SolClientError(err.to_string())
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+impl From<solana_sdk::program_error::ProgramError> for SolFailed {
|
|
|
|
|
+ fn from(err: solana_sdk::program_error::ProgramError) -> SolFailed {
|
|
|
|
|
+ SolFailed::ProgramError(err.to_string())
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+impl From<crate::error::Error> for SolFailed {
|
|
|
|
|
+ fn from(err: crate::error::Error) -> SolFailed {
|
|
|
|
|
+ SolFailed::SolClientError(err.to_string())
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+impl From<serde_json::Error> for SolFailed {
|
|
|
|
|
+ fn from(err: serde_json::Error) -> SolFailed {
|
|
|
|
|
+ SolFailed::JsonError(err.to_string())
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
pub type SolResult<T> = std::result::Result<T, SolFailed>;
|
|
pub type SolResult<T> = std::result::Result<T, SolFailed>;
|