Skip to main content

legend_client/
error.rs

1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum LegendPrimeError {
5    #[error("{}", format_api_error(.status, .code, .message, .details))]
6    Api {
7        code: String,
8        message: String,
9        status: u16,
10        details: Option<serde_json::Value>,
11    },
12
13    #[error("HTTP error: {0}")]
14    Http(#[from] reqwest::Error),
15
16    #[error("Deserialization error: {0}")]
17    Deserialize(serde_json::Error),
18}
19
20fn format_api_error(
21    status: &u16,
22    code: &str,
23    message: &str,
24    details: &Option<serde_json::Value>,
25) -> String {
26    match details {
27        Some(d) => format!("API error ({status}): [{code}] {message}\nDetails: {d}"),
28        None => format!("API error ({status}): [{code}] {message}"),
29    }
30}
31
32pub type Result<T> = std::result::Result<T, LegendPrimeError>;