use thiserror::Error;
#[derive(Error, Debug)]
#[non_exhaustive]
pub enum Error {
#[error("Network request failed: {0}")]
Network(#[from] reqwest::Error),
#[error("Failed to parse API response: {details}")]
Parsing {
details: String,
#[source]
source: serde_json::Error,
response_body: String,
},
#[error("API error (status {status_code}): {message}")]
ApiError { status_code: u16, message: String },
#[error("Invalid input: {0}")]
InvalidInput(String),
#[error("DataFrame operation failed")]
DataFrame(#[from] polars::prelude::PolarsError),
#[error("Authentication failed: {0}")]
Authentication(String),
#[error("Rate limit exceeded, retry after {retry_after} seconds")]
RateLimit { retry_after: u64 },
}
pub type Result<T> = std::result::Result<T, Error>;