gtk_ui_builder/parser/
token.rs

1#[derive(Debug, Clone, PartialEq, Eq)]
2pub enum Token {
3    /// `"Example string"`
4    Text {
5        begin: usize,
6        end: usize,
7        value: String
8    },
9    
10    /// `(Example "parentheses")`
11    Parentheses {
12        begin: usize,
13        end: usize,
14        tokens: Vec<Token>
15    },
16
17    // TODO:
18    
19    /// `[Example, "square brackets"]`
20    SquareBrackets {
21        begin: usize,
22        end: usize,
23        tokens: Vec<Token>
24    },
25
26    /// `{example: "curly brackets", a: b}`
27    CurlyBrackets {
28        begin: usize,
29        end: usize,
30        tokens: Vec<Token>
31    },
32
33    /// `example values`
34    Other {
35        begin: usize,
36        end: usize,
37        value: String
38    }
39}
40
41impl Token {
42    pub fn is_other(&self) -> bool {
43        match self {
44            Self::Other { .. } => true,
45            _ => false
46        }
47    }
48
49    pub fn is_other_value<T: ToString>(&self, other: T) -> bool {
50        match self {
51            Self::Other { value, .. } => *value == other.to_string(),
52            _ => false
53        }
54    }
55
56    pub fn get_value(&self) -> Option<String> {
57        match self {
58            Token::Text  { value, .. } |
59            Token::Other { value, .. } => Some(value.clone()),
60            _ => None
61        }
62    }
63
64    pub fn get_begin(&self) -> usize {
65        match *self {
66            Token::Text           { begin, .. } => begin,
67            Token::Parentheses    { begin, .. } => begin,
68            Token::SquareBrackets { begin, .. } => begin,
69            Token::CurlyBrackets  { begin, .. } => begin,
70            Token::Other          { begin, .. } => begin
71        }
72    }
73
74    pub fn get_end(&self) -> usize {
75        match *self {
76            Token::Text           { end, .. } => end,
77            Token::Parentheses    { end, .. } => end,
78            Token::SquareBrackets { end, .. } => end,
79            Token::CurlyBrackets  { end, .. } => end,
80            Token::Other          { end, .. } => end
81        }
82    }
83}