oak_ini/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
4
5pub type IniToken = Token<IniTokenType>;
7
8#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub enum IniTokenType {
12 Whitespace,
14 Newline,
16 Comment,
18 Error,
20 Eof,
22
23 LeftBrace,
25 RightBrace,
27 LeftBracket,
29 RightBracket,
31 DoubleLeftBracket,
33 DoubleRightBracket,
35 Comma,
37 Dot,
39 Equal,
41
42 Identifier,
44 String,
46 Integer,
48 Float,
50 Boolean,
52 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}