use std::fmt::Debug;
use algonaut_algod::apis;
use thiserror::Error;
#[derive(Error, Debug)]
pub enum AlgodError {
#[error("request error")]
Reqwest(#[from] reqwest::Error),
#[error("JSON decode error")]
Decode(#[from] serde_json::Error),
#[error("msgpack decode error")]
Msgpack(#[from] rmp_serde::decode::Error),
#[error("I/O error")]
Io(#[from] std::io::Error),
#[error("API error (status {status}): {content}")]
ResponseError { status: u16, content: String },
}
impl<T: Debug> From<apis::Error<T>> for AlgodError {
fn from(error: apis::Error<T>) -> Self {
match error {
apis::Error::Reqwest(e) => AlgodError::Reqwest(e),
apis::Error::Serde(e) => AlgodError::Decode(e),
apis::Error::Msgpack(e) => AlgodError::Msgpack(e),
apis::Error::Io(e) => AlgodError::Io(e),
apis::Error::ResponseError(resp) => AlgodError::ResponseError {
status: resp.status.as_u16(),
content: resp.content,
},
}
}
}