claude_code_toolkit/
error.rs

1use 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}