lib_client_openrouter/
error.rs

1//! Error types for the OpenRouter client.
2
3use thiserror::Error;
4
5/// OpenRouter API error type.
6#[derive(Debug, Error)]
7pub enum OpenRouterError {
8    /// HTTP request failed.
9    #[error("Request failed: {0}")]
10    Request(#[from] reqwest::Error),
11
12    /// API returned an error response.
13    #[error("API error ({status}): {message}")]
14    Api { status: u16, message: String },
15
16    /// Rate limited by the API.
17    #[error("Rate limited, retry after {retry_after}s")]
18    RateLimited { retry_after: u64 },
19
20    /// Authentication failed.
21    #[error("Unauthorized: invalid API key")]
22    Unauthorized,
23
24    /// Request was forbidden.
25    #[error("Forbidden: {0}")]
26    Forbidden(String),
27
28    /// Resource not found.
29    #[error("Not found: {0}")]
30    NotFound(String),
31
32    /// JSON serialization/deserialization error.
33    #[error("JSON error: {0}")]
34    Json(#[from] serde_json::Error),
35
36    /// Invalid request parameters.
37    #[error("Invalid request: {0}")]
38    InvalidRequest(String),
39
40    /// Server error.
41    #[error("Server error: {0}")]
42    ServerError(String),
43
44    /// Context length exceeded.
45    #[error("Context length exceeded: {0}")]
46    ContextLengthExceeded(String),
47
48    /// Insufficient credits.
49    #[error("Insufficient credits: {0}")]
50    InsufficientCredits(String),
51
52    /// Model not available.
53    #[error("Model not available: {0}")]
54    ModelNotAvailable(String),
55}
56
57/// Result type alias for OpenRouter operations.
58pub type Result<T> = std::result::Result<T, OpenRouterError>;