ricecoder_providers/
error.rs

1//! Error types for the providers module
2
3use thiserror::Error;
4
5/// Errors that can occur when interacting with providers
6#[derive(Debug, Error, PartialEq)]
7pub enum ProviderError {
8    /// Provider not found by ID or name
9    #[error("Provider not found: {0}")]
10    NotFound(String),
11
12    /// Authentication failed (never includes key details)
13    #[error("Authentication failed")]
14    AuthError,
15
16    /// Rate limited by provider
17    #[error("Rate limited, retry after {0} seconds")]
18    RateLimited(u64),
19
20    /// Context is too large for the provider
21    #[error("Context too large: {0} tokens, max {1}")]
22    ContextTooLarge(usize, usize),
23
24    /// Network error occurred
25    #[error("Network error")]
26    NetworkError,
27
28    /// Generic provider error
29    #[error("Provider error: {0}")]
30    ProviderError(String),
31
32    /// Configuration error
33    #[error("Configuration error: {0}")]
34    ConfigError(String),
35
36    /// Invalid model specified
37    #[error("Invalid model: {0}")]
38    InvalidModel(String),
39
40    /// Model not available in provider
41    #[error("Model not available: {0}")]
42    ModelNotAvailable(String),
43
44    /// Serialization/deserialization error
45    #[error("Serialization error: {0}")]
46    SerializationError(String),
47
48    /// Internal error
49    #[error("Internal error: {0}")]
50    Internal(String),
51}
52
53impl From<serde_json::Error> for ProviderError {
54    fn from(err: serde_json::Error) -> Self {
55        ProviderError::SerializationError(err.to_string())
56    }
57}
58
59impl From<reqwest::Error> for ProviderError {
60    fn from(err: reqwest::Error) -> Self {
61        if err.is_timeout() {
62            ProviderError::ProviderError("Request timeout".to_string())
63        } else if err.is_connect() {
64            ProviderError::NetworkError
65        } else {
66            ProviderError::ProviderError(err.to_string())
67        }
68    }
69}