horizons-ai 0.1.2-dev.0

Async Rust SDK for the Horizons REST API
Documentation
use thiserror::Error;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HorizonsErrorKind {
    NotFound,
    Auth,
    Validation,
    Server,
    Stream,
    Transport,
    Serialization,
}

#[derive(Debug, Error)]
#[error("{kind:?}: {message}")]
pub struct HorizonsError {
    pub kind: HorizonsErrorKind,
    pub status: Option<u16>,
    pub message: String,
}

impl HorizonsError {
    pub fn new(kind: HorizonsErrorKind, status: Option<u16>, message: impl Into<String>) -> Self {
        Self {
            kind,
            status,
            message: message.into(),
        }
    }
}

impl From<reqwest::Error> for HorizonsError {
    fn from(e: reqwest::Error) -> Self {
        HorizonsError::new(HorizonsErrorKind::Transport, None, e.to_string())
    }
}

impl From<serde_json::Error> for HorizonsError {
    fn from(e: serde_json::Error) -> Self {
        HorizonsError::new(HorizonsErrorKind::Serialization, None, e.to_string())
    }
}