mtml_parser/
ast.rs

1extern crate serde;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
5pub struct AttributeValue {
6    pub value: String,
7    pub line: u32,
8    pub column: usize,
9    pub offset: usize,
10}
11
12#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
13pub struct Attribute {
14    pub name: String,
15    pub values: Vec<AttributeValue>,
16    pub line: u32,
17    pub column: usize,
18    pub offset: usize,
19}
20
21#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
22pub struct RootNode {
23    pub children: Vec<Node>,
24}
25
26#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
27pub struct TextNode {
28    pub value: String,
29    pub line: u32,
30    pub column: usize,
31    pub offset: usize,
32}
33
34#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
35pub struct FunctionTagNode {
36    pub name: String,
37    pub attributes: Vec<Attribute>,
38    pub line: u32,
39    pub column: usize,
40    pub offset: usize,
41}
42
43#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
44pub struct BlockTagNode {
45    pub name: String,
46    pub attributes: Vec<Attribute>,
47    pub children: Vec<Node>,
48    pub line: u32,
49    pub column: usize,
50    pub offset: usize,
51}
52
53#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
54#[serde(tag = "type")]
55pub enum Node {
56    Root(RootNode),
57    Text(TextNode),
58    FunctionTag(FunctionTagNode),
59    BlockTag(BlockTagNode),
60}