oak_handlebars/ast/
mod.rs1use core::range::Range;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
6pub struct HandlebarsRoot {
7 pub nodes: Vec<TemplateNode>,
8}
9
10#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
11pub enum TemplateNode {
12 Content(Content),
13 Mustache(Mustache),
14 Block(Block),
15 Comment(Comment),
16 Partial(Partial),
17}
18
19#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
20pub struct Content {
21 pub text: String,
22 #[serde(with = "oak_core::serde_range")]
23 pub span: Range<usize>,
24}
25
26#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
27pub struct Mustache {
28 pub expression: Expression,
29 pub is_unescaped: bool,
30 #[serde(with = "oak_core::serde_range")]
31 pub span: Range<usize>,
32}
33
34#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
35pub struct Block {
36 pub name: String,
37 pub params: Vec<Expression>,
38 pub body: Vec<TemplateNode>,
39 pub inverse: Option<Vec<TemplateNode>>,
40 #[serde(with = "oak_core::serde_range")]
41 pub span: Range<usize>,
42}
43
44#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
45pub struct Comment {
46 pub text: String,
47 #[serde(with = "oak_core::serde_range")]
48 pub span: Range<usize>,
49}
50
51#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
52pub struct Partial {
53 pub name: String,
54 pub params: Vec<Expression>,
55 #[serde(with = "oak_core::serde_range")]
56 pub span: Range<usize>,
57}
58
59#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
60pub enum Expression {
61 Path(String),
62 Literal(Literal),
63 SubExpression(Box<Expression>),
64}
65
66#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
67pub enum Literal {
68 String(String),
69 Number(f64),
70 Boolean(bool),
71}