1use thiserror::Error;
9
10#[derive(Error, Debug)]
12pub enum AptuError {
13 #[error("GitHub API error: {0}")]
15 GitHub(#[from] octocrab::Error),
16
17 #[error("AI provider error: {message}")]
19 AI {
20 message: String,
21 status: Option<u16>,
22 },
23
24 #[error("Authentication required - run `aptu auth login` first")]
26 NotAuthenticated,
27
28 #[error("Rate limit exceeded on {provider}, retry after {retry_after}s")]
30 RateLimited { provider: String, retry_after: u64 },
31
32 #[error("Configuration error: {0}")]
34 Config(#[from] config::ConfigError),
35
36 #[error("Invalid JSON response from AI")]
38 InvalidAIResponse(#[source] serde_json::Error),
39
40 #[error("Network error: {0}")]
42 Network(#[from] reqwest::Error),
43
44 #[error("Keyring error: {0}")]
46 Keyring(#[from] keyring::Error),
47}