1use thiserror::Error;
2
3#[derive(Error, Debug)]
5#[non_exhaustive]
6pub enum Error {
7 #[error("Network request failed: {0}")]
9 Network(#[from] reqwest::Error),
10
11 #[error("Failed to parse API response: {details}")]
13 Parsing {
14 details: String,
15 #[source]
16 source: serde_json::Error,
17 response_body: String,
18 },
19
20 #[error("API error (status {status_code}): {message}")]
22 ApiError { status_code: u16, message: String },
23
24 #[error("Invalid input: {0}")]
26 InvalidInput(String),
27
28 #[error("DataFrame operation failed")]
30 DataFrame(#[from] polars::prelude::PolarsError),
31
32 #[error("Authentication failed: {0}")]
34 Authentication(String),
35
36 #[error("Rate limit exceeded, retry after {retry_after} seconds")]
38 RateLimit { retry_after: u64 },
39}
40
41pub type Result<T> = std::result::Result<T, Error>;