oneline_template/template/template/
template_error.rs

1use crate::function_executor::FunctionError;
2use std::error::Error;
3use std::fmt;
4use std::string::FromUtf8Error;
5
6/// Template execution error.
7#[derive(Debug)]
8pub enum TemplateError {
9    /// Field in path not found.
10    PathNotFound(String),
11    /// Path contains sequence.
12    PathContainsSeq(String),
13    /// Path contains map.
14    PathContainsMap(String),
15    /// Path contains unknown type.
16    PathContainsUnknownType(String),
17    /// Path contains error type.
18    PathContainsUnknownErrorType(String),
19    /// Function not found.
20    FunctionNotFound(String),
21    /// Function execution error.
22    FunctionError(FunctionError),
23    /// Structure serialization error.
24    SerializationError,
25    /// Unable convert boolean to string.
26    UnableConvertBoolToString,
27    /// Unable convert option to string.
28    UnableConvertOptionToString,
29    /// Unable convert float to string.
30    UnableConvertFloatToString,
31    /// Unable convert `vec<u8>` to utf-8 string.
32    VecToUtf8ConvertationError(FromUtf8Error),
33}
34
35impl From<FunctionError> for TemplateError {
36    fn from(error: FunctionError) -> Self {
37        return TemplateError::FunctionError(error);
38    }
39}
40
41impl fmt::Display for TemplateError {
42    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43        match self {
44            TemplateError::PathNotFound(ref path) => {
45                write!(f, "Path not found: `{}`", path)
46            },
47            TemplateError::PathContainsSeq(ref path) => {
48                write!(f, "Path `{}` contains sequence", path)
49            },
50            TemplateError::PathContainsMap(ref path) => {
51                write!(f, "Path `{}` contains map", path)
52            },
53            TemplateError::PathContainsUnknownType(ref path) => {
54                write!(f, "Path `{}` contains unknown type", path)
55            },
56            TemplateError::PathContainsUnknownErrorType(ref path) => {
57                write!(f, "Path `{}` contains unknown error type", path)
58            },
59            TemplateError::FunctionNotFound(ref function_name) => {
60                write!(f, "Function `{}` not found", function_name)
61            },
62            TemplateError::FunctionError(ref error) => {
63                write!(f, "{}", error)
64            },
65            TemplateError::SerializationError => {
66                write!(f, "Error while serialization")
67            },
68            TemplateError::UnableConvertBoolToString => {
69                write!(f, "Convertation bool to string is not supported")
70            },
71            TemplateError::UnableConvertOptionToString => {
72                write!(f, "Convertation option to string is not supported")
73            },
74            TemplateError::UnableConvertFloatToString => {
75                write!(f, "Convertation float to string is not supported")
76            },
77            TemplateError::VecToUtf8ConvertationError(ref error) => {
78                write!(f, "Error while converting vec to string: {}", error)
79            },
80        }
81    }
82}
83
84impl Error for TemplateError {
85    fn source(&self) -> Option<&(dyn Error + 'static)> {
86        match self {
87            TemplateError::PathNotFound(..) => {
88                return None;
89            },
90            TemplateError::PathContainsSeq(..) => {
91                return None;
92            },
93            TemplateError::PathContainsMap(..) => {
94                return None;
95            },
96            TemplateError::PathContainsUnknownType(..) => {
97                return None;
98            },
99            TemplateError::PathContainsUnknownErrorType(..) => {
100                return None;
101            },
102            TemplateError::FunctionNotFound(..) => {
103                return None;
104            },
105            TemplateError::FunctionError(..) => {
106                return None;
107            },
108            TemplateError::SerializationError => {
109                return None;
110            },
111            TemplateError::UnableConvertBoolToString => {
112                return None;
113            },
114            TemplateError::UnableConvertOptionToString => {
115                return None;
116            },
117            TemplateError::UnableConvertFloatToString => {
118                return None;
119            },
120            TemplateError::VecToUtf8ConvertationError(ref error) => {
121                return Some(error);
122            },
123        }
124    }
125}