zen_tmpl/
error.rs

1use serde::ser::SerializeMap;
2use serde::{Serialize, Serializer};
3use thiserror::Error;
4use zen_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>(&self, serializer: S) -> Result<S::Ok, S::Error>
29    where
30        S: Serializer,
31    {
32        match self {
33            TemplateRenderError::IsolateError(isolate) => isolate.serialize(serializer),
34            TemplateRenderError::ParserError(parser) => parser.serialize(serializer),
35        }
36    }
37}
38
39#[derive(Debug, Error)]
40pub enum ParserError {
41    #[error("Open bracket")]
42    OpenBracket,
43
44    #[error("Close bracket")]
45    CloseBracket,
46}
47
48impl Serialize for ParserError {
49    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
50    where
51        S: Serializer,
52    {
53        let mut map = serializer.serialize_map(None)?;
54
55        map.serialize_entry("type", "templateParserError")?;
56
57        match self {
58            ParserError::OpenBracket => map.serialize_entry("value", "openBracket")?,
59            ParserError::CloseBracket => map.serialize_entry("value", "closeBracket")?,
60        }
61
62        map.end()
63    }
64}