oak_dot/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
3
4pub type DotToken = Token<DotTokenType>;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10#[repr(u8)]
11pub enum DotTokenType {
12 Identifier,
15 String,
17 Number,
19 Whitespace,
21 Newline,
23
24 Graph,
27 Digraph,
29 Subgraph,
31 Node,
33 Edge,
35 Strict,
37
38 Arrow, Line, Equal, Semicolon, Comma, LeftBrace, RightBrace, LeftBracket, RightBracket, LeftParen, RightParen, Comment,
67
68 Root,
71 Error,
73 Eof,
75}
76
77impl TokenType for DotTokenType {
78 type Role = UniversalTokenRole;
79 const END_OF_STREAM: Self = Self::Eof;
80
81 fn is_ignored(&self) -> bool {
82 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
83 }
84
85 fn role(&self) -> Self::Role {
86 match self {
87 Self::Identifier => UniversalTokenRole::Name,
88 Self::String | Self::Number => UniversalTokenRole::Literal,
89 Self::Graph | Self::Digraph | Self::Subgraph | Self::Node | Self::Edge | Self::Strict => UniversalTokenRole::Keyword,
90 Self::Arrow | Self::Line | Self::Equal | Self::Semicolon | Self::Comma => UniversalTokenRole::Operator,
91 Self::LeftBrace | Self::RightBrace | Self::LeftBracket | Self::RightBracket | Self::LeftParen | Self::RightParen => UniversalTokenRole::Punctuation,
92 Self::Comment => UniversalTokenRole::Comment,
93 _ => UniversalTokenRole::None,
94 }
95 }
96}