ricecoder_providers/
error.rs1use thiserror::Error;
4
5#[derive(Debug, Error, PartialEq)]
7pub enum ProviderError {
8 #[error("Provider not found: {0}")]
10 NotFound(String),
11
12 #[error("Authentication failed")]
14 AuthError,
15
16 #[error("Rate limited, retry after {0} seconds")]
18 RateLimited(u64),
19
20 #[error("Context too large: {0} tokens, max {1}")]
22 ContextTooLarge(usize, usize),
23
24 #[error("Network error")]
26 NetworkError,
27
28 #[error("Provider error: {0}")]
30 ProviderError(String),
31
32 #[error("Configuration error: {0}")]
34 ConfigError(String),
35
36 #[error("Invalid model: {0}")]
38 InvalidModel(String),
39
40 #[error("Model not available: {0}")]
42 ModelNotAvailable(String),
43
44 #[error("Serialization error: {0}")]
46 SerializationError(String),
47
48 #[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}