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
use failure::_core::fmt::{Display, Error, Formatter};
use std::io;
#[derive(Debug, Fail)]
pub enum ECnfLoaderError {
ReadFail(io::Error),
FailParseKey(u16, String),
FailParse(u16, String),
IllegalRightMidParen(u16, String),
UnknownSeparator(u16, String, char),
UnknownValue(u16, String, String),
}
impl Display for ECnfLoaderError {
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
use ECnfLoaderError::*;
return match self {
ReadFail(io_e) => write!(f, "Read Fail: {}", io_e),
FailParseKey(n, s) => write!(f, "Fail parse key at line: \"{}\" in {}", s, n),
FailParse(n, prefix) => {
write!(f, "Illegal End Line for prefix: \"{}\" in {}", prefix, n)
}
IllegalRightMidParen(n, l) => {
write!(f, "Unknown end mid paren on line: \"{}\" in {}", l, n)
}
UnknownSeparator(n, l, sep) => write!(
f,
"Unknown key-value separator: \"{}\" on line: \"{}\" in {}",
sep, l, n
),
UnknownValue(n, l, v) => {
write!(f, "Unknown value: \"{}\" of line: \"{}\" in {}", v, l, n)
}
};
}
}
impl From<io::Error> for ECnfLoaderError {
fn from(e: io::Error) -> Self {
ECnfLoaderError::ReadFail(e)
}
}