oak_cmd/lexer/
token_type.rs1use oak_core::{TokenType, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7#[repr(u16)]
8pub enum CmdTokenType {
10 Whitespace,
12 Newline,
14 Comment,
16 StringLiteral,
18 Variable,
20 NumberLiteral,
22 Identifier,
24 Keyword,
26 Operator,
28 Delimiter,
30 Command,
32 Label,
34 Text,
36 Error,
38 Eof,
40}
41
42impl oak_core::TokenType for CmdTokenType {
43 const END_OF_STREAM: Self = Self::Eof;
44 type Role = UniversalTokenRole;
45
46 fn is_ignored(&self) -> bool {
47 matches!(self, Self::Whitespace | Self::Newline | Self::Comment)
48 }
49
50 fn is_comment(&self) -> bool {
51 matches!(self, Self::Comment)
52 }
53
54 fn is_whitespace(&self) -> bool {
55 matches!(self, Self::Whitespace | Self::Newline)
56 }
57
58 fn role(&self) -> Self::Role {
59 match self {
60 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
61 Self::Comment => UniversalTokenRole::Comment,
62 Self::Keyword => UniversalTokenRole::Keyword,
63 Self::Identifier | Self::Variable | Self::Command | Self::Label => UniversalTokenRole::Name,
64 Self::StringLiteral | Self::NumberLiteral => UniversalTokenRole::Literal,
65 Self::Operator => UniversalTokenRole::Operator,
66 Self::Delimiter => UniversalTokenRole::Punctuation,
67 Self::Eof => UniversalTokenRole::Eof,
68 Self::Error => UniversalTokenRole::Error,
69 _ => UniversalTokenRole::None,
70 }
71 }
72}