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#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[repr(u8)]
8pub enum D2TokenType {
9    Whitespace,
10    Newline,
11    Comment,
12
13    Id,
14    Label,
15    Colon,
16    Arrow,
17    LeftBrace,
18    RightBrace,
19
20    Error,
21}
22
23impl TokenType for D2TokenType {
24    type Role = UniversalTokenRole;
25    const END_OF_STREAM: Self = Self::Error;
26
27    fn is_ignored(&self) -> bool {
28        matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
29    }
30
31    fn role(&self) -> Self::Role {
32        match self {
33            _ => UniversalTokenRole::None,
34        }
35    }
36}