Skip to main content

openfga_dsl_parser/lexer/
token.rs

1#[derive(Debug, PartialEq, Eq, Clone, Copy)]
2pub enum TokenKind {
3    // keywords
4    Type,
5    Relations,
6    Define,
7    As,
8    This,
9    Or,
10    And,
11    From,
12    But,
13    Not,
14
15    Text,
16
17    Newline,
18    EOF,
19
20    Illegal,
21}
22
23#[derive(Debug, PartialEq, Eq, Clone)]
24pub struct Token {
25    lit: String,
26    kind: TokenKind,
27    // span: Span,
28}
29
30// #[derive(Debug, PartialEq, Eq, Clone)]
31// pub struct Span {
32//     start: usize,
33//     end: usize,
34// }
35
36impl Token {
37    pub fn new(lit: String, kind: TokenKind) -> Self {
38        Self {
39            lit,
40            kind,
41            // span: Span { start, end },
42        }
43    }
44
45    pub fn literal(&self) -> &str {
46        &self.lit
47    }
48
49    pub fn kind(&self) -> TokenKind {
50        self.kind
51    }
52}
53
54impl TokenKind {
55    pub fn is_to_keyword(literal: &str) -> Option<Self> {
56        match literal {
57            "type" => Some(Self::Type),
58            "relations" => Some(Self::Relations),
59            "define" => Some(Self::Define),
60            "as" => Some(Self::As),
61            "self" => Some(Self::This),
62            "or" => Some(Self::Or),
63            "and" => Some(Self::And),
64            "from" => Some(Self::From),
65            "but" => Some(Self::But),
66            "not" => Some(Self::Not),
67            _ => None,
68        }
69    }
70}