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
use chrono;
use serde_json;
use std;
use toml;
use url;
#[cfg(feature = "d-sqlite")]
use rusqlite;
#[cfg(feature = "d-postgres")]
use postgres;
#[cfg(feature = "d-mysql")]
use mysql;
error_chain! {
foreign_links {
Io(std::io::Error);
StringUtf8Error(std::string::FromUtf8Error);
StrUtf8Error(std::str::Utf8Error);
TomlDe(toml::de::Error);
TomlSe(toml::ser::Error);
UrlParse(url::ParseError);
ChronoParse(chrono::ParseError);
Json(serde_json::Error);
Sqlite(rusqlite::Error) #[cfg(feature="d-sqlite")];
Postgres(postgres::Error) #[cfg(feature="d-postgres")];
MySql(mysql::Error) #[cfg(feature="d-mysql")];
}
errors {
Config(s: String) {
description("ConfigError")
display("ConfigError: {}", s)
}
Migration(s: String) {
description("MigrationError")
display("MigrationError: {}", s)
}
MigrationComplete(s: String) {
description("MigrationComplete")
display("MigrationComplete: {}", s)
}
MigrationNotFound(s: String) {
description("MigrationNotFound")
display("MigrationNotFound: {}", s)
}
ShellCommand(s: String) {
description("ShellCommand")
display("ShellCommandError: {}", s)
}
ShellCommandNoOutput(s: String) {
description("ShellCommandNoOutput")
display("ShellCommandNoOutputError: {}", s)
}
PathError(s: String) {
description("PathError")
display("PathError: {}", s)
}
TagError(s: String) {
description("TagError")
display("TagError: {}", s)
}
InvalidDbKind(s: String) {
description("InvalidDbKind")
display("InvalidDbKind: {}", s)
}
}
}
impl Error {
pub fn is_migration_complete(&self) -> bool {
match *self.kind() {
ErrorKind::MigrationComplete(_) => true,
_ => false,
}
}
pub fn is_shell_command_no_output(&self) -> bool {
match *self.kind() {
ErrorKind::ShellCommandNoOutput(_) => true,
_ => false,
}
}
}