codex-api/src/error.rs
40 lines
use crate::rate_limits::RateLimitError;use codex_client::TransportError;use http::StatusCode;use std::time::Duration;use thiserror::Error;#[derive(Debug, Error)]pub enum ApiError { #[error(transparent)] Transport(#[from] TransportError), #[error("api error {status}: {message}")] Api { status: StatusCode, message: String }, #[error("stream error: {0}")] Stream(String), #[error("context window exceeded")] ContextWindowExceeded, #[error("quota exceeded")] QuotaExceeded, #[error("usage not included")] UsageNotIncluded, #[error("retryable error: {message}")] Retryable { message: String, delay: Option<Duration>, }, #[error("rate limit: {0}")] RateLimit(String), #[error("invalid request: {message}")] InvalidRequest { message: String }, #[error("cyber policy: {message}")] CyberPolicy { message: String }, #[error("server overloaded")] ServerOverloaded,}impl From<RateLimitError> for ApiError { fn from(err: RateLimitError) -> Self { Self::RateLimit(err.to_string()) }}