Skip to main content

envl_utils/
curr_token.rs

1use crate::types::FilePosition;
2
3pub trait Push<T> {
4    fn push(&mut self, c: T, pos: FilePosition);
5}
6
7#[derive(Clone, Debug, Default)]
8pub struct CurrentToken {
9    pub token: String,
10    pub start: FilePosition,
11}
12
13impl CurrentToken {
14    pub fn new() -> Self {
15        Self::default()
16    }
17
18    pub fn set_pos(&mut self, pos: FilePosition) {
19        self.start = pos;
20    }
21
22    pub fn clear(&mut self) {
23        self.token.clear();
24        self.start = FilePosition::default();
25    }
26
27    pub fn is_empty(&mut self) -> bool {
28        self.token.is_empty()
29    }
30}
31
32impl Push<char> for CurrentToken {
33    fn push(&mut self, c: char, pos: FilePosition) {
34        if self.token.is_empty() {
35            self.start = pos;
36        }
37        self.token.push(c);
38    }
39}
40
41impl Push<String> for CurrentToken {
42    fn push(&mut self, c: String, pos: FilePosition) {
43        if self.token.is_empty() {
44            self.start = pos;
45        }
46        self.token.push_str(&c);
47    }
48}