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
51#[derive(Debug, serde::Deserialize)]
53pub struct DiscordError {
54 pub code: u32,
55 pub message: String,
56 #[serde(default)]
57 #[allow(dead_code)]
58 pub errors: Option<serde_json::Value>,
59}