1use failure::{Error, Fail};
2use handlebars::{RenderError, TemplateFileError, TemplateRenderError};
3use jsonpath_lib::JsonPathError;
4use url::ParseError;
5
6#[derive(Debug, Fail)]
7pub enum GeneratorError {
8 #[fail(display = "Failed to process")]
9 GenericError(#[cause] Error),
10 #[fail(display = "{}", _1)]
11 GenericDetailError(#[cause] Error, String),
12 #[fail(display = "Failed to process")]
13 JsonError(#[cause] serde_json::Error),
14 #[fail(display = "Failed to process")]
15 YamlError(#[cause] serde_yaml::Error),
16 #[fail(display = "Failed to process")]
17 TemplateError(#[cause] TemplateFileError),
18 #[fail(display = "Failed to process")]
19 TemplateRenderError(#[cause] TemplateRenderError),
20 #[fail(display = "Failed to process")]
21 IoError(#[cause] std::io::Error),
22 #[fail(display = "{}", _0)]
23 Error(String),
24 #[fail(display = "JSON path error: {}", _0)]
25 JsonPath(String),
26}
27
28impl From<GeneratorError> for RenderError {
29 fn from(err: GeneratorError) -> Self {
30 RenderError::with(err.compat())
31 }
32}
33
34impl From<TemplateFileError> for GeneratorError {
35 fn from(err: TemplateFileError) -> GeneratorError {
36 GeneratorError::TemplateError(err)
37 }
38}
39
40impl From<std::io::Error> for GeneratorError {
41 fn from(err: std::io::Error) -> GeneratorError {
42 GeneratorError::IoError(err)
43 }
44}
45
46impl From<serde_json::Error> for GeneratorError {
47 fn from(err: serde_json::Error) -> GeneratorError {
48 GeneratorError::JsonError(err)
49 }
50}
51
52impl From<serde_yaml::Error> for GeneratorError {
53 fn from(err: serde_yaml::Error) -> GeneratorError {
54 GeneratorError::YamlError(err)
55 }
56}
57
58impl From<JsonPathError> for GeneratorError {
59 fn from(err: JsonPathError) -> GeneratorError {
60 GeneratorError::JsonPath(err.to_string())
61 }
62}
63
64impl From<handlebars::TemplateRenderError> for GeneratorError {
65 fn from(err: handlebars::TemplateRenderError) -> Self {
66 GeneratorError::GenericError(err.into())
67 }
68}
69
70impl From<handlebars::RenderError> for GeneratorError {
71 fn from(err: handlebars::RenderError) -> Self {
72 GeneratorError::GenericError(err.into())
73 }
74}
75
76impl From<ParseError> for GeneratorError {
77 fn from(err: ParseError) -> Self {
78 GeneratorError::GenericError(err.into())
79 }
80}
81
82impl From<Error> for GeneratorError {
83 fn from(err: Error) -> GeneratorError {
84 GeneratorError::GenericError(err)
85 }
86}