oak_handlebars/ast/
mod.rs1#![doc = include_str!("readme.md")]
2use core::range::Range;
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[derive(Clone, Debug, PartialEq)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct HandlebarsRoot {
10 pub nodes: Vec<TemplateNode>,
12}
13
14#[derive(Clone, Debug, PartialEq)]
16#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17pub enum TemplateNode {
18 Content(Content),
20 Mustache(Mustache),
22 Block(Block),
24 Comment(Comment),
26 Partial(Partial),
28}
29
30#[derive(Clone, Debug, PartialEq)]
32#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
33pub struct Content {
34 pub text: String,
36 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
38 pub span: Range<usize>,
39}
40
41#[derive(Clone, Debug, PartialEq)]
43#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
44pub struct Mustache {
45 pub expression: Expression,
47 pub is_unescaped: bool,
49 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
51 pub span: Range<usize>,
52}
53
54#[derive(Clone, Debug, PartialEq)]
56#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
57pub struct Block {
58 pub name: String,
60 pub params: Vec<Expression>,
62 pub body: Vec<TemplateNode>,
64 pub inverse: Option<Vec<TemplateNode>>,
66 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
68 pub span: Range<usize>,
69}
70
71#[derive(Clone, Debug, PartialEq)]
73#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
74pub struct Comment {
75 pub text: String,
77 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
79 pub span: Range<usize>,
80}
81
82#[derive(Clone, Debug, PartialEq)]
84#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
85pub struct Partial {
86 pub name: String,
88 pub params: Vec<Expression>,
90 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
92 pub span: Range<usize>,
93}
94
95#[derive(Clone, Debug, PartialEq)]
97#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
98pub enum Expression {
99 Path(String),
101 Literal(Literal),
103 SubExpression(Box<Expression>),
105}
106
107#[derive(Clone, Debug, PartialEq)]
109#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
110pub enum Literal {
111 String(String),
113 Number(f64),
115 Boolean(bool),
117}