actiondb/matcher/pattern_source/
error.rs1use matcher::pattern::testmessage;
2
3use serde_json;
4use serde_yaml;
5use std::fmt;
6use std::error;
7use std::io;
8
9#[derive(Debug)]
10pub enum BuildError {
11 TestMessage(testmessage::Error),
12 Io(io::Error),
13 DeserJson(serde_json::Error),
14 DeserYaml(serde_yaml::Error),
15 UnsupportedFileExtension,
16 NotUtf8FileName,
17}
18
19impl From<testmessage::Error> for BuildError {
20 fn from(error: testmessage::Error) -> BuildError {
21 BuildError::TestMessage(error)
22 }
23}
24
25impl From<io::Error> for BuildError {
26 fn from(error: io::Error) -> BuildError {
27 BuildError::Io(error)
28 }
29}
30
31impl From<serde_json::Error> for BuildError {
32 fn from(error: serde_json::Error) -> BuildError {
33 BuildError::DeserJson(error)
34 }
35}
36
37impl From<serde_yaml::Error> for BuildError {
38 fn from(error: serde_yaml::Error) -> BuildError {
39 BuildError::DeserYaml(error)
40 }
41}
42
43impl fmt::Display for BuildError {
44 fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> {
45 match *self {
46 BuildError::TestMessage(ref error) => error.fmt(formatter),
47 BuildError::Io(ref error) => error.fmt(formatter),
48 BuildError::DeserJson(ref error) => error.fmt(formatter),
49 BuildError::DeserYaml(ref error) => error.fmt(formatter),
50 BuildError::UnsupportedFileExtension =>
51 formatter.write_fmt(format_args!("The given file extension is not suppoted")),
52 BuildError::NotUtf8FileName =>
53 formatter.write_str("The given filename contains non Utf-8 characters"),
54 }
55 }
56}
57
58impl error::Error for BuildError {
59 fn description(&self) -> &str {
60 match *self {
61 BuildError::TestMessage(ref error) => error.description(),
62 BuildError::Io(ref error) => error.description(),
63 BuildError::DeserJson(ref error) => error.description(),
64 BuildError::DeserYaml(ref error) => error.description(),
65 BuildError::UnsupportedFileExtension => "The given file extension is not supported",
66 BuildError::NotUtf8FileName => "The given filename contains non Utf-8 characters",
67 }
68 }
69
70 fn cause(&self) -> Option<&error::Error> {
71 match *self {
72 BuildError::TestMessage(ref error) => error.cause(),
73 BuildError::Io(ref error) => error.cause(),
74 BuildError::DeserJson(ref error) => error.cause(),
75 BuildError::DeserYaml(ref error) => error.cause(),
76 BuildError::UnsupportedFileExtension | BuildError::NotUtf8FileName => None,
77 }
78 }
79}