moduforge_rules_template/
error.rs

1use serde::ser::SerializeMap;
2use serde::{Serialize, Serializer};
3use thiserror::Error;
4use moduforge_rules_expression::IsolateError;
5
6#[derive(Debug, Error)]
7pub enum TemplateRenderError {
8    #[error("isolate error: {0}")]
9    IsolateError(IsolateError),
10
11    #[error("parser error: {0}")]
12    ParserError(ParserError),
13}
14
15impl From<IsolateError> for TemplateRenderError {
16    fn from(value: IsolateError) -> Self {
17        Self::IsolateError(value)
18    }
19}
20
21impl From<ParserError> for TemplateRenderError {
22    fn from(value: ParserError) -> Self {
23        Self::ParserError(value)
24    }
25}
26
27impl Serialize for TemplateRenderError {
28    fn serialize<S>(
29        &self,
30        serializer: S,
31    ) -> Result<S::Ok, S::Error>
32    where
33        S: Serializer,
34    {
35        match self {
36            TemplateRenderError::IsolateError(isolate) => {
37                isolate.serialize(serializer)
38            },
39            TemplateRenderError::ParserError(parser) => {
40                parser.serialize(serializer)
41            },
42        }
43    }
44}
45
46#[derive(Debug, Error)]
47pub enum ParserError {
48    #[error("Open bracket")]
49    OpenBracket,
50
51    #[error("Close bracket")]
52    CloseBracket,
53}
54
55impl Serialize for ParserError {
56    fn serialize<S>(
57        &self,
58        serializer: S,
59    ) -> Result<S::Ok, S::Error>
60    where
61        S: Serializer,
62    {
63        let mut map = serializer.serialize_map(None)?;
64
65        map.serialize_entry("type", "templateParserError")?;
66
67        match self {
68            ParserError::OpenBracket => {
69                map.serialize_entry("value", "openBracket")?
70            },
71            ParserError::CloseBracket => {
72                map.serialize_entry("value", "closeBracket")?
73            },
74        }
75
76        map.end()
77    }
78}