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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
use std::path::PathBuf;
use std::io::Error as IoError;
use std::num::ParseIntError;
use std::net::AddrParseError;
use config::ConfigError;
use tera::Error as TeraError;
use hyper::error::Error as HyperError;
use notify::Error as NotifyError;
use glob::PatternError;
#[derive(Debug, Fail)]
pub enum Error {
#[fail(display = "IO error")]
Io(#[cause] IoError),
#[fail(display = "Int Parse error")]
IntParse(#[cause] ParseIntError),
#[fail(display = "Address Parse error")]
AddrParse(#[cause] AddrParseError),
#[fail(display = "Notify error")]
Notify(#[cause] NotifyError),
#[fail(display = "Glob pattern error")]
Pattern(#[cause] PatternError),
#[fail(display = "Config error")]
Config(#[cause] ConfigError),
#[fail(display = "Template error: {}", _0)]
Template(String),
#[fail(display = "Server error")]
Hyper(#[cause] HyperError),
#[fail(display = "Argument error: {}", _0)]
Argument(String),
#[fail(display = "blog root directory {:?} already exists", _0)]
RootDirExisted(PathBuf),
#[fail(display = "blog theme {} not found", _0)]
ThemeNotFound(String),
#[fail(display = "blog theme {} in use, can not be deleted", _0)]
ThemeInUse(String),
#[fail(display = "post path {:?} format error: must be relative path without file extension", _0)]
PostPathInvaild(PathBuf),
#[fail(display = "post path {:?} already existed", _0)]
PostPathExisted(PathBuf),
#[fail(display = "post {:?} head part format error", _0)]
PostHead(PathBuf),
#[fail(display = "post {:?} has not body part", _0)]
PostNoBody(PathBuf),
}
impl From<IoError> for Error {
fn from(err: IoError) -> Error {
Error::Io(err)
}
}
impl From<ParseIntError> for Error {
fn from(err: ParseIntError) -> Error {
Error::IntParse(err)
}
}
impl From<AddrParseError> for Error {
fn from(err: AddrParseError) -> Error {
Error::AddrParse(err)
}
}
impl From<NotifyError> for Error {
fn from(err: NotifyError) -> Error {
Error::Notify(err)
}
}
impl From<PatternError> for Error {
fn from(err: PatternError) -> Error {
Error::Pattern(err)
}
}
impl From<ConfigError> for Error {
fn from(err: ConfigError) -> Error {
Error::Config(err)
}
}
impl From<TeraError> for Error {
fn from(err: TeraError) -> Error {
Error::Template(err.description().to_string())
}
}
impl From<HyperError> for Error {
fn from(err: HyperError) -> Error {
Error::Hyper(err)
}
}
pub type Result<T> = ::std::result::Result<T, Error>;