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>;