Skip to main content

appcore_args/
error.rs

1use std::fmt;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq)]
4pub enum CliErrorKind {
5    InvalidInput,
6    InvalidSpecification,
7    UnknownOption,
8    UnexpectedArgument,
9    MissingCommand,
10    MissingOption,
11    MissingValue,
12    InvalidValue,
13    DuplicateOption,
14    OptionConflict,
15    MissingRequirement,
16}
17
18#[derive(Clone, Debug, PartialEq, Eq)]
19pub struct CliError {
20    kind: CliErrorKind,
21    message: String,
22}
23
24impl CliError {
25    pub fn new(kind: CliErrorKind, message: impl Into<String>) -> Self {
26        Self {
27            kind,
28            message: message.into(),
29        }
30    }
31
32    pub fn kind(&self) -> CliErrorKind {
33        self.kind
34    }
35}
36
37impl fmt::Display for CliError {
38    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
39        formatter.write_str(&self.message)
40    }
41}
42
43impl std::error::Error for CliError {}