1use std::convert::From;
2use std::fmt;
3use std::num;
4
5pub type Result<T> = std::result::Result<T, Error>;
7
8#[derive(Debug, PartialEq)]
10pub enum Error {
11 IllegalRequiredError(String),
13
14 IllegalDefaultError(String),
16
17 MissingRequiredArgument(String, String),
19
20 TooManyArguments(String, usize),
22
23 ParseBoolError(std::str::ParseBoolError),
25
26 ParseIntError(num::ParseIntError),
28
29 ParseFloatError(num::ParseFloatError),
31
32 UnknownCommand(String),
34}
35
36impl std::error::Error for Error {}
37
38impl fmt::Display for Error {
39 fn fmt(&self, f: &mut fmt::Formatter) -> std::result::Result<(), fmt::Error> {
40 match self {
41 Error::IllegalDefaultError(parameter) => {
42 write!(f, "Error: Parameter '{}' cannot have a default", parameter)
43 }
44 Error::IllegalRequiredError(parameter) => {
45 write!(f, "Error: Parameter '{}' cannot be required", parameter)
46 }
47 Error::MissingRequiredArgument(command, parameter) => write!(
48 f,
49 "Error: Missing required argument '{}' for command '{}'",
50 parameter, command
51 ),
52 Error::TooManyArguments(command, nargs) => write!(
53 f,
54 "Error: Command '{}' can have no more than {} arguments",
55 command, nargs,
56 ),
57 Error::ParseBoolError(error) => write!(f, "Error: {}", error,),
58 Error::ParseFloatError(error) => write!(f, "Error: {}", error,),
59 Error::ParseIntError(error) => write!(f, "Error: {}", error,),
60 Error::UnknownCommand(command) => write!(f, "Error: Unknown command '{}'", command),
61 }
62 }
63}
64
65impl From<num::ParseIntError> for Error {
66 fn from(error: num::ParseIntError) -> Self {
67 Error::ParseIntError(error)
68 }
69}
70
71impl From<num::ParseFloatError> for Error {
72 fn from(error: num::ParseFloatError) -> Self {
73 Error::ParseFloatError(error)
74 }
75}
76
77impl From<std::str::ParseBoolError> for Error {
78 fn from(error: std::str::ParseBoolError) -> Self {
79 Error::ParseBoolError(error)
80 }
81}