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}