lightcone_sdk/api/
error.rs1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum ApiError {
8 #[error("HTTP error: {0}")]
10 Http(#[from] reqwest::Error),
11
12 #[error("Not found: {0}")]
14 NotFound(String),
15
16 #[error("Bad request: {0}")]
18 BadRequest(String),
19
20 #[error("Permission denied: {0}")]
22 Forbidden(String),
23
24 #[error("Rate limited: {0}")]
26 RateLimited(String),
27
28 #[error("Unauthorized: {0}")]
30 Unauthorized(String),
31
32 #[error("Conflict: {0}")]
34 Conflict(String),
35
36 #[error("Server error: {0}")]
38 ServerError(String),
39
40 #[error("Deserialization error: {0}")]
42 Deserialize(String),
43
44 #[error("Invalid parameter: {0}")]
46 InvalidParameter(String),
47
48 #[error("Unexpected status {0}: {1}")]
50 UnexpectedStatus(u16, String),
51}
52
53pub type ApiResult<T> = Result<T, ApiError>;
55
56#[derive(Debug, Clone, serde::Deserialize)]
58pub struct ErrorResponse {
59 #[serde(default)]
61 pub status: Option<String>,
62 #[serde(alias = "error")]
64 pub message: Option<String>,
65 #[serde(default)]
67 pub details: Option<String>,
68}
69
70impl ErrorResponse {
71 pub fn get_message(&self) -> String {
73 self.message
74 .clone()
75 .or_else(|| self.details.clone())
76 .unwrap_or_else(|| "Unknown error".to_string())
77 }
78}