1#[derive(Clone, Debug)]
2pub struct ContentNode {
3 pub node_type: NodeType,
4 pub name: String,
5 pub is_root: bool,
6}
7
8#[derive(Clone, Debug)]
9pub enum NodeType {
10 Internal(Vec<ContentNode>),
11
12 Leaf(String),
13
14 Unexpected,
15}
16
17impl NodeType {
18 fn get_content(&mut self) -> Option<&mut Vec<ContentNode>> {
19 match self {
20 Self::Internal(v) => Some(v),
21 _ => None
22 }
23 }
24}
25
26#[derive(Debug)]
27pub enum Token {
28 String(String),
29 Number(i64),
30 CommentSign,
31 Dot,
32 Equals,
33 Eol,
34 Eof,
35 Garbage,
36 Space,
37}
38
39#[derive(Debug, Clone)]
40pub struct Span {
41 pub start: usize,
42 pub end: usize,
43}
44
45impl Span {
46 pub fn new(start: usize, end: usize) -> Span {
47 Span { start, end }
48 }
49}
50
51#[derive(Debug)]
52pub struct TokenWrapper {
53 pub content: Token,
54 pub span: Span,
55}
56
57impl TokenWrapper {
58 pub fn new(content: Token, span: Span) -> TokenWrapper {
59 TokenWrapper { content, span }
60 }
61
62 pub fn ukn(span: Span) -> TokenWrapper {
63 TokenWrapper {
64 content: Token::Garbage,
65 span,
66 }
67 }
68}
69
70pub type Entry = (Key, Value);
75
76#[derive(Debug, Clone, PartialEq)]
78pub enum Value {
79 Integer(i64),
81 Null,
82 String(String),
83}
84
85pub type Key = Vec<String>;