Skip to main content

oak_d2/lexer/
token_type.rs

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