Skip to main content

propparse/
types.rs

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
70/// Represents an entry of a `.properties` file
71///
72/// # Example
73/// this.is.an = example
74pub type Entry = (Key, Value);
75
76/// Represents a possible Value of a `.properties` file entry.
77#[derive(Debug, Clone, PartialEq)]
78pub enum Value {
79    // Real(String),
80    Integer(i64),
81    Null,
82    String(String),
83}
84
85pub type Key = Vec<String>;