Skip to main content

oak_ini/lexer/
token_type.rs

1//! INI token types and roles.
2
3use oak_core::{Token, TokenType, UniversalTokenRole};
4
5/// A token in the INI language.
6pub type IniToken = Token<IniTokenType>;
7
8/// INI token types.
9#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub enum IniTokenType {
12    /// Whitespace characters.
13    Whitespace,
14    /// Newline character.
15    Newline,
16    /// Comment.
17    Comment,
18    /// Error token.
19    Error,
20    /// End of file.
21    Eof,
22
23    /// `{` symbol.
24    LeftBrace,
25    /// `}` symbol.
26    RightBrace,
27    /// `[` symbol.
28    LeftBracket,
29    /// `]` symbol.
30    RightBracket,
31    /// `[[` symbol.
32    DoubleLeftBracket,
33    /// `]]` symbol.
34    DoubleRightBracket,
35    /// `,` symbol.
36    Comma,
37    /// `.` symbol.
38    Dot,
39    /// `=` operator.
40    Equal,
41
42    /// Identifier.
43    Identifier,
44    /// String literal.
45    String,
46    /// Integer literal.
47    Integer,
48    /// Floating-point literal.
49    Float,
50    /// Boolean literal.
51    Boolean,
52    /// Date and time literal.
53    DateTime,
54}
55
56impl TokenType for IniTokenType {
57    type Role = UniversalTokenRole;
58    const END_OF_STREAM: Self = Self::Eof;
59
60    fn is_ignored(&self) -> bool {
61        matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
62    }
63
64    fn role(&self) -> Self::Role {
65        match self {
66            Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
67            Self::Comment => UniversalTokenRole::Comment,
68            Self::LeftBrace | Self::RightBrace | Self::LeftBracket | Self::RightBracket | Self::DoubleLeftBracket | Self::DoubleRightBracket | Self::Comma | Self::Dot => UniversalTokenRole::Punctuation,
69            Self::Equal => UniversalTokenRole::Operator,
70            Self::Identifier => UniversalTokenRole::Name,
71            Self::String | Self::Integer | Self::Float | Self::Boolean | Self::DateTime => UniversalTokenRole::Literal,
72            Self::Error => UniversalTokenRole::Error,
73            Self::Eof => UniversalTokenRole::Eof,
74        }
75    }
76}