oak_handlebars/ast/
mod.rs1#![doc = include_str!("readme.md")]
2use core::range::Range;
3
4#[derive(Clone, Debug, PartialEq)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct HandlebarsRoot {
8 pub nodes: Vec<TemplateNode>,
10}
11
12#[derive(Clone, Debug, PartialEq)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub enum TemplateNode {
16 Content(Content),
18 Mustache(Mustache),
20 Block(Block),
22 Comment(Comment),
24 Partial(Partial),
26}
27
28#[derive(Clone, Debug, PartialEq)]
30#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
31pub struct Content {
32 pub text: String,
34 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
36 pub span: Range<usize>,
37}
38
39#[derive(Clone, Debug, PartialEq)]
41#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
42pub struct Mustache {
43 pub expression: Expression,
45 pub is_unescaped: bool,
47 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
49 pub span: Range<usize>,
50}
51
52#[derive(Clone, Debug, PartialEq)]
54#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
55pub struct Block {
56 pub name: String,
58 pub params: Vec<Expression>,
60 pub body: Vec<TemplateNode>,
62 pub inverse: Option<Vec<TemplateNode>>,
64 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
66 pub span: Range<usize>,
67}
68
69#[derive(Clone, Debug, PartialEq)]
71#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
72pub struct Comment {
73 pub text: String,
75 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
77 pub span: Range<usize>,
78}
79
80#[derive(Clone, Debug, PartialEq)]
82#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
83pub struct Partial {
84 pub name: String,
86 pub params: Vec<Expression>,
88 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
90 pub span: Range<usize>,
91}
92
93#[derive(Clone, Debug, PartialEq)]
95#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
96pub enum Expression {
97 Path(String),
99 Literal(Literal),
101 SubExpression(Box<Expression>),
103}
104
105#[derive(Clone, Debug, PartialEq)]
107#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
108pub enum Literal {
109 String(String),
111 Number(f64),
113 Boolean(bool),
115}