1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum HttpError {
8 #[error("Request error: {0}")]
10 Request(#[from] reqwest::Error),
11
12 #[error("JSON error: {0}")]
14 Json(#[from] serde_json::Error),
15
16 #[error("Rate limited, retry after {retry_after_ms}ms")]
18 RateLimited {
19 retry_after_ms: u64,
21 global: bool,
23 },
24
25 #[error("Discord API error {code}: {message}")]
27 Discord {
28 code: u32,
30 message: String,
32 },
33
34 #[error("Unauthorized: Invalid token")]
36 Unauthorized,
37
38 #[error("Forbidden: Missing permissions")]
40 Forbidden,
41
42 #[error("Not found")]
44 NotFound,
45
46 #[error("Discord server error: {0}")]
48 ServerError(u16),
49
50 #[error("Invalid header value: {0}")]
52 InvalidHeaderValue(#[from] reqwest::header::InvalidHeaderValue),
53
54 #[error("Client error: {0}")]
56 ClientError(String),
57}
58
59#[derive(Debug, serde::Deserialize)]
61pub struct DiscordError {
62 pub code: u32,
63 pub message: String,
64 #[serde(default)]
65 #[allow(dead_code)]
66 pub errors: Option<serde_json::Value>,
67}