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}