use thiserror::Error;
#[derive(Debug, Error)]
pub enum CredentialError {
#[error("Claude Code credentials not found. Run `claude` to login.")]
NotFound,
#[error("Credentials expired. Run `claude` to re-login.")]
Expired,
#[error("Failed to parse credentials: {0}")]
Parse(String),
#[error("Missing field in credentials: {0}")]
MissingField(&'static str),
#[error("Permission denied accessing credentials: {0}")]
Permission(String),
#[error("I/O error reading credentials: {0}")]
Io(String),
#[error("HOME environment variable not set")]
NoHomeDir,
}
#[derive(Debug, Error)]
pub enum ApiError {
#[error("Network error: {0}")]
Network(String),
#[error("Unauthorized. Run `claude` to re-login.")]
Unauthorized,
#[error("Rate limited. Retry after: {retry_after:?}")]
RateLimited {
retry_after: Option<String>,
},
#[error("Server error: {0}")]
Server(u16),
#[error("Unexpected status code: {0}")]
Unexpected(u16),
}
#[derive(Debug, Error)]
pub enum Error {
#[error(transparent)]
Credential(#[from] CredentialError),
#[error(transparent)]
Api(#[from] ApiError),
#[error("Failed to parse API response: {0}")]
Parse(String),
}