actiondb/matcher/pattern_source/
error.rs

1use 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}