openfga_dsl_parser/lexer/
token.rs1#[derive(Debug, PartialEq, Eq, Clone, Copy)]
2pub enum TokenKind {
3 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 }
29
30impl Token {
37 pub fn new(lit: String, kind: TokenKind) -> Self {
38 Self {
39 lit,
40 kind,
41 }
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}