Skip to main content

claude_wrapper/
error.rs

1use std::path::PathBuf;
2
3/// Errors returned by claude-wrapper operations.
4#[derive(Debug, thiserror::Error)]
5pub enum Error {
6    /// The `claude` binary was not found in PATH.
7    #[error("claude binary not found in PATH")]
8    NotFound,
9
10    /// A claude command failed with a non-zero exit code.
11    #[error("claude command failed: {command} (exit code {exit_code}){}", working_dir.as_ref().map(|d| format!(" (in {})", d.display())).unwrap_or_default())]
12    CommandFailed {
13        command: String,
14        exit_code: i32,
15        stdout: String,
16        stderr: String,
17        working_dir: Option<PathBuf>,
18    },
19
20    /// An I/O error occurred while spawning or communicating with the process.
21    #[error("io error: {message}{}", working_dir.as_ref().map(|d| format!(" (in {})", d.display())).unwrap_or_default())]
22    Io {
23        message: String,
24        #[source]
25        source: std::io::Error,
26        working_dir: Option<PathBuf>,
27    },
28
29    /// The command timed out.
30    #[error("claude command timed out after {timeout_seconds}s")]
31    Timeout { timeout_seconds: u64 },
32
33    /// JSON parsing failed.
34    #[cfg(feature = "json")]
35    #[error("json parse error: {message}")]
36    Json {
37        message: String,
38        #[source]
39        source: serde_json::Error,
40    },
41
42    /// The installed CLI version does not meet the minimum requirement.
43    #[error("CLI version {found} does not meet minimum requirement {minimum}")]
44    VersionMismatch {
45        found: crate::version::CliVersion,
46        minimum: crate::version::CliVersion,
47    },
48}
49
50impl From<std::io::Error> for Error {
51    fn from(e: std::io::Error) -> Self {
52        Self::Io {
53            message: e.to_string(),
54            source: e,
55            working_dir: None,
56        }
57    }
58}
59
60/// Result type alias for claude-wrapper operations.
61pub type Result<T> = std::result::Result<T, Error>;