1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum QueryResolverError {
5 #[error("AI error: {0}")]
6 Ai(#[from] AIError),
7 #[error("JSON deserialization error: {0}. Raw response: {1}")]
8 JsonDeserialization(#[source] serde_json::Error, String),
9 #[error("Max retries exceeded")]
10 MaxRetriesExceeded,
11}
12
13#[derive(Error, Debug, Clone)]
14pub enum AIError {
15 #[error("Claude API error: {0}")]
16 Claude(#[from] ClaudeError),
17 #[error("OpenAI API error: {0}")]
18 OpenAI(#[from] OpenAIError),
19 #[error("DeepSeek API error: {0}")]
20 DeepSeek(#[from] DeepSeekError),
21 #[error("Mock error: {0}")]
22 Mock(String),
23}
24
25#[derive(Error, Debug, Clone)]
26pub enum ClaudeError {
27 #[error("HTTP error: {0}")]
28 Http(String),
29 #[error("API error: {0}")]
30 Api(String),
31 #[error("Rate limit exceeded")]
32 RateLimit,
33 #[error("Authentication failed")]
34 Authentication,
35}
36
37#[derive(Error, Debug, Clone)]
38pub enum OpenAIError {
39 #[error("HTTP error: {0}")]
40 Http(String),
41 #[error("API error: {0}")]
42 Api(String),
43 #[error("Rate limit exceeded")]
44 RateLimit,
45 #[error("Authentication failed")]
46 Authentication,
47}
48
49#[derive(Error, Debug, Clone)]
50pub enum DeepSeekError {
51 #[error("HTTP error: {0}")]
52 Http(String),
53 #[error("API error: {0}")]
54 Api(String),
55 #[error("Rate limit exceeded")]
56 RateLimit,
57 #[error("Authentication failed")]
58 Authentication,
59}