1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use std::char::ParseCharError;
use std::num::{ParseFloatError, ParseIntError};
use std::result::Result;
use std::str::{ParseBoolError, Utf8Error};
use std::{error, fmt, fmt::Debug, fmt::Display, string::FromUtf8Error};
pub type ChoicesResult<T> = Result<T, ChoicesError>;
#[derive(Debug, Clone, PartialEq)]
pub enum ChoicesError {
ParseError(String),
Utf8Error(Utf8Error),
FromUtf8Error(FromUtf8Error),
TryFromSliceError(usize, usize),
ParseIntError(ParseIntError),
ParseFloatError(ParseFloatError),
ParseBoolError(ParseBoolError),
ParseCharError(ParseCharError),
ValidationError(String),
}
impl Display for ChoicesError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
use ChoicesError::*;
match self {
ParseError(err) => write!(f, "ParseError: {}", err),
Utf8Error(err) => write!(f, "Utf8Error: {}", err),
FromUtf8Error(err) => write!(f, "FromUtf8Error: {}", err),
TryFromSliceError(len_provided, len_requested) => write!(
f,
"could not convert slice of len {} into array of len {}",
len_provided, len_requested
),
ParseIntError(err) => write!(f, "ParseIntError: {}", err),
ParseFloatError(err) => write!(f, "ParseFloatError: {}", err),
ParseBoolError(err) => write!(f, "ParseBoolError: {}", err),
ParseCharError(err) => write!(f, "ParseCharError: {}", err),
ValidationError(err) => write!(f, "ValidationError: {}", err),
}
}
}
impl error::Error for ChoicesError {}
macro_rules! impl_trivial_from_error {
($($ty:ident),*) => {
$(impl From<$ty> for ChoicesError {
fn from(err: $ty) -> Self {
Self::$ty(err)
}
})*
};
}
impl_trivial_from_error! {Utf8Error, FromUtf8Error, ParseIntError, ParseFloatError, ParseBoolError, ParseCharError}