use thiserror::Error;
pub type Result<T> = std::result::Result<T, SdkError>;
#[derive(Error, Debug)]
pub enum SdkError {
#[error("HTTP request failed: {0}")]
Http(#[from] reqwest::Error),
#[error("WebSocket error: {0}")]
WebSocket(Box<tokio_tungstenite::tungstenite::Error>),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("Crypto error: {0}")]
Crypto(String),
#[error("Task error: {0}")]
Task(String),
#[error("Connection error: {0}")]
Connection(String),
#[error("Operation timed out")]
Timeout,
#[error("Method '{0}' not found")]
MethodNotFound(String),
#[error("Invalid configuration: {0}")]
InvalidConfig(String),
#[error("URL parse error: {0}")]
UrlParse(#[from] url::ParseError),
#[error("Error: {0}")]
Generic(String),
}
impl From<String> for SdkError {
fn from(s: String) -> Self {
SdkError::Generic(s)
}
}
impl From<&str> for SdkError {
fn from(s: &str) -> Self {
SdkError::Generic(s.to_string())
}
}
impl From<aes_gcm::Error> for SdkError {
fn from(e: aes_gcm::Error) -> Self {
SdkError::Crypto(format!("AES-GCM error: {:?}", e))
}
}
impl From<base64::DecodeError> for SdkError {
fn from(e: base64::DecodeError) -> Self {
SdkError::Crypto(format!("Base64 decode error: {}", e))
}
}
impl From<tokio_tungstenite::tungstenite::Error> for SdkError {
fn from(e: tokio_tungstenite::tungstenite::Error) -> Self {
SdkError::WebSocket(Box::new(e))
}
}