Skip to main content

oak_d2/lexer/
token_type.rs

1use oak_core::{TokenType, UniversalTokenRole};
2
3/// Token types for the D2 language.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6#[repr(u8)]
7pub enum D2TokenType {
8    /// Whitespace.
9    Whitespace,
10    /// Newline.
11    Newline,
12    /// Comment.
13    Comment,
14
15    /// Identifier.
16    Id,
17    /// Label.
18    Label,
19    /// Colon `:`.
20    Colon,
21    /// Arrow `->`.
22    Arrow,
23    /// Left brace `{`.
24    LeftBrace,
25    /// Right brace `}`.
26    RightBrace,
27
28    /// Lexing error.
29    Error,
30}
31
32impl TokenType for D2TokenType {
33    type Role = UniversalTokenRole;
34    const END_OF_STREAM: Self = Self::Error;
35
36    fn is_ignored(&self) -> bool {
37        matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
38    }
39
40    fn role(&self) -> Self::Role {
41        match self {
42            _ => UniversalTokenRole::None,
43        }
44    }
45}