1use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum Error {
8 #[error("HTTP request failed: {0}")]
10 Request(#[from] reqwest::Error),
11
12 #[error("Invalid URL: {0}")]
14 Url(#[from] url::ParseError),
15
16 #[error("API error ({status}): {message}")]
18 Api {
19 status: u16,
20 message: String,
21 },
22
23 #[error("Rate limit exceeded. Requests remaining: {requests_remaining:?}")]
25 RateLimited {
26 requests_remaining: Option<u32>,
27 },
28
29 #[error("Unauthorized: Invalid API key")]
31 Unauthorized,
32
33 #[error("Failed to deserialize response: {0}")]
35 Deserialization(#[from] serde_json::Error),
36
37 #[error("Missing required parameter: {0}")]
39 MissingParameter(&'static str),
40
41 #[error("Invalid parameter value for {parameter}: {message}")]
43 InvalidParameter {
44 parameter: &'static str,
45 message: String,
46 },
47}
48
49pub type Result<T> = std::result::Result<T, Error>;