pub mod client;
pub mod types;
pub use client::Client;
pub use ApiClientError as Error;
use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub enum EntityKind {
Approval,
Intent,
Network,
Quote,
Resolver,
SupportedToken,
Swap,
Token,
UserNonce,
Transaction,
TransactionReceipt,
InternalEvent,
BlockchainEvent,
WatcherRequest,
Webhooks,
Affiliate,
Address,
UserWithdrawTask,
Other,
Htlc,
ResolverApiClient,
}
#[derive(Debug, Deserialize)]
pub struct ErrorResponse {
pub code: u64,
pub message: String,
pub entity: EntityKind,
}
#[derive(Debug, thiserror::Error)]
pub enum ApiClientError {
#[error("Network error: {0}")]
Network(String),
#[error("Request timed out")]
Timeout,
#[error("Invalid endpoint URL: {0}")]
InvalidUrl(String),
#[error("Invalid API key: {0}")]
InvalidApiKey(String),
#[error("Client initialization failed: {0}")]
ClientInitialization(String),
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Resource not found (404)")]
NotFound,
#[error("Server error: {0}")]
ServerErrorResponse(ErrorResponse),
#[error("Deserialization error: {0}")]
DeserializationError(String),
}
impl std::fmt::Display for ErrorResponse {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"Error code: {}, message: {}, entity: {:?}",
self.code, self.message, self.entity
)
}
}
impl From<reqwest::Error> for ApiClientError {
fn from(err: reqwest::Error) -> Self {
if err.is_timeout() {
return ApiClientError::Timeout;
}
ApiClientError::Network(err.to_string())
}
}