xacli_core/
error.rs

1//! Error types for XaCLI Core
2
3use thiserror::Error;
4
5/// Result type alias for XaCLI operations
6pub type Result<T> = std::result::Result<T, Error>;
7
8/// Errors that can occur during command parsing and execution
9///
10/// Note: Help, Version, and Completion requests are handled via `ParseResult`
11/// enum in the parser module, not as errors.
12#[derive(Error, Debug)]
13pub enum Error {
14    #[error("Command not found: {0}")]
15    CommandNotFound(String),
16
17    #[error("Invalid argument: {0}")]
18    InvalidArgument(String),
19
20    #[error("Missing required argument: {0}")]
21    MissingArgument(String),
22
23    #[error("Invalid flag: {0}")]
24    InvalidFlag(String),
25
26    #[error("Missing required flag: {0}")]
27    MissingFlag(String),
28
29    #[error("Invalid flag value for '{flag}': {message}")]
30    InvalidFlagValue { flag: String, message: String },
31
32    #[error("Invalid argument value: {0}")]
33    InvalidArgumentValue(String),
34
35    #[error("Invalid input: {0}")]
36    InvalidInput(String),
37
38    #[error("Too many arguments provided")]
39    TooManyArguments,
40
41    #[error("Command execution failed: {0}")]
42    ExecutionError(String),
43
44    #[error("Completion error: {0}")]
45    CompletionError(String),
46
47    #[error("IO error: {0}")]
48    IoError(#[from] std::io::Error),
49
50    #[error("Interrupted")]
51    InterruptError,
52
53    #[error("Parse error: {0}")]
54    ParseError(String),
55
56    #[error("Type conversion error: {0}")]
57    TypeError(String),
58
59    #[error("{0}")]
60    Custom(String),
61}
62
63impl Error {
64    /// Create a custom error with a message
65    pub fn custom(msg: impl Into<String>) -> Self {
66        Error::Custom(msg.into())
67    }
68}