use thiserror::Error;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum ClientError {
#[error("client builder error: {0}")]
Builder(String),
#[error("HTTP error: {0}")]
Http(#[from] reqwest::Error),
#[error("decode error: {0}")]
Decode(#[from] serde_json::Error),
#[error("protocol error ({code}): {msg}")]
ProtocolError {
code: u16,
msg: String,
},
#[error("signature error: {0}")]
Signature(String),
#[error("signature mismatch: expected signer {expected}, recovered {recovered}")]
SignatureMismatch {
expected: String,
recovered: String,
},
#[error("invalid key: {0}")]
InvalidKey(String),
#[error("websocket error: {0}")]
WebSocket(String),
#[error("validation error: {0}")]
Validation(String),
}
impl From<k256::ecdsa::Error> for ClientError {
fn from(e: k256::ecdsa::Error) -> Self {
Self::Signature(e.to_string())
}
}
impl From<tokio_tungstenite::tungstenite::Error> for ClientError {
fn from(e: tokio_tungstenite::tungstenite::Error) -> Self {
Self::WebSocket(e.to_string())
}
}