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>,
11}
12
13#[derive(Clone, Debug, PartialEq)]
14#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15pub enum TemplateNode {
16 Content(Content),
17 Mustache(Mustache),
18 Block(Block),
19 Comment(Comment),
20 Partial(Partial),
21}
22
23#[derive(Clone, Debug, PartialEq)]
24#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
25pub struct Content {
26 pub text: String,
27 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
28 pub span: Range<usize>,
29}
30
31#[derive(Clone, Debug, PartialEq)]
32#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
33pub struct Mustache {
34 pub expression: Expression,
35 pub is_unescaped: bool,
36 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
37 pub span: Range<usize>,
38}
39
40#[derive(Clone, Debug, PartialEq)]
41#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
42pub struct Block {
43 pub name: String,
44 pub params: Vec<Expression>,
45 pub body: Vec<TemplateNode>,
46 pub inverse: Option<Vec<TemplateNode>>,
47 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
48 pub span: Range<usize>,
49}
50
51#[derive(Clone, Debug, PartialEq)]
52#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
53pub struct Comment {
54 pub text: String,
55 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
56 pub span: Range<usize>,
57}
58
59#[derive(Clone, Debug, PartialEq)]
60#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
61pub struct Partial {
62 pub name: String,
63 pub params: Vec<Expression>,
64 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
65 pub span: Range<usize>,
66}
67
68#[derive(Clone, Debug, PartialEq)]
69#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
70pub enum Expression {
71 Path(String),
72 Literal(Literal),
73 SubExpression(Box<Expression>),
74}
75
76#[derive(Clone, Debug, PartialEq)]
77#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
78pub enum Literal {
79 String(String),
80 Number(f64),
81 Boolean(bool),
82}