Codex Handbook
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())    }}