use std::error::Error;
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum ParseError {
UnknownFlag {
flag: String,
},
MissingValue {
option: String,
},
MissingRequired {
arg: String,
},
UnknownCommand {
name: String,
},
UnexpectedArgument {
value: String,
},
HelpRequested(String),
VersionRequested(String),
Unauthorized {
command: String,
},
}
impl fmt::Display for ParseError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ParseError::UnknownFlag { flag } => write!(f, "unknown flag: {flag}"),
ParseError::MissingValue { option } => {
write!(f, "missing value for option: {option}")
}
ParseError::MissingRequired { arg } => {
write!(f, "missing required argument: {arg}")
}
ParseError::UnknownCommand { name } => write!(f, "unknown command: {name}"),
ParseError::UnexpectedArgument { value } => {
write!(f, "unexpected argument: {value}")
}
ParseError::HelpRequested(text) | ParseError::VersionRequested(text) => {
write!(f, "{text}")
}
ParseError::Unauthorized { command } => {
write!(f, "not authorized to run: {command}")
}
}
}
}
impl Error for ParseError {}