claude_code_toolkit/
error.rs1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum ClaudeCodeError {
5 #[error("IO error: {0}")] Io(#[from] std::io::Error),
6
7 #[error("JSON error: {0}")] Json(#[from] serde_json::Error),
8
9 #[error("YAML error: {0}")] Yaml(#[from] serde_yaml::Error),
10
11 #[error("Process execution error: {0}")] Process(String),
12
13 #[error("HTTP error: {0}")] Http(#[from] reqwest::Error),
14
15 #[error("Configuration error: {0}")] InvalidConfig(String),
16
17 #[error("Provider error: {0}")] Provider(String),
18
19 #[error("Validation error: {0}")] Validation(String),
20
21 #[error("Setup error: {0}")] Setup(String),
22
23 #[error("Credentials not found at {path}")] CredentialsNotFound {
24 path: String,
25 },
26
27 #[error("Invalid credentials format: {0}")] InvalidCredentials(String),
28
29 #[error("Time parsing error: {0}")] Time(#[from] chrono::ParseError),
30
31 #[error("Notification error: {0}")] Notification(String),
32
33 #[error("Systemd error: {0}")] Systemd(String),
34
35 #[error("Daemon not running")]
36 DaemonNotRunning,
37
38 #[error("Daemon already running")]
39 DaemonAlreadyRunning,
40
41 #[error("Access denied")] AccessDenied {
42 target_type: String,
43 name: String,
44 },
45
46 #[error("Target not found")] TargetNotFound {
47 target_type: String,
48 name: String,
49 },
50
51 #[error("Invalid repository format: {repo}")] InvalidRepoFormat {
52 repo: String,
53 },
54
55 #[error("Generic error: {0}")] Generic(String),
56}
57
58pub type Result<T> = std::result::Result<T, ClaudeCodeError>;
59
60impl From<String> for ClaudeCodeError {
61 fn from(s: String) -> Self {
62 ClaudeCodeError::Generic(s)
63 }
64}
65
66impl From<&str> for ClaudeCodeError {
67 fn from(s: &str) -> Self {
68 ClaudeCodeError::Generic(s.to_string())
69 }
70}