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}