oak_nginx/lexer/
token_type.rs1use oak_core::{Token, TokenType, UniversalTokenRole};
2
3pub type NginxToken = Token<NginxTokenType>;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub enum NginxTokenType {
10 Root,
12 Directive,
14 Block,
16 Parameter,
18 Value,
20 Comment,
22
23 ServerKeyword, LocationKeyword, UpstreamKeyword, HttpKeyword, EventsKeyword, ListenKeyword, ServerNameKeyword, RootKeyword, IndexKeyword, ProxyPassKeyword, LeftBrace, RightBrace, Semicolon, Identifier,
53 String,
55 Number,
57 Path,
59 Url,
61
62 Whitespace,
64 Newline,
66 CommentToken,
68 Eof,
70 Error,
72}
73
74impl NginxTokenType {
75 pub fn is_element(&self) -> bool {
77 matches!(self, Self::Root | Self::Directive | Self::Block | Self::Parameter | Self::Value | Self::Comment)
78 }
79
80 pub fn is_token(&self) -> bool {
82 !self.is_element()
83 }
84}
85
86impl TokenType for NginxTokenType {
87 type Role = UniversalTokenRole;
88 const END_OF_STREAM: Self = Self::Eof;
89
90 fn role(&self) -> Self::Role {
91 match self {
92 Self::ServerKeyword | Self::LocationKeyword | Self::UpstreamKeyword | Self::HttpKeyword | Self::EventsKeyword | Self::ListenKeyword | Self::ServerNameKeyword | Self::RootKeyword | Self::IndexKeyword | Self::ProxyPassKeyword => {
93 UniversalTokenRole::Keyword
94 }
95
96 Self::LeftBrace | Self::RightBrace | Self::Semicolon => UniversalTokenRole::Punctuation,
97
98 Self::Identifier => UniversalTokenRole::Name,
99 Self::String | Self::Number | Self::Path | Self::Url => UniversalTokenRole::Literal,
100
101 Self::Whitespace | Self::Newline => UniversalTokenRole::Whitespace,
102 Self::CommentToken => UniversalTokenRole::Comment,
103 Self::Error => UniversalTokenRole::Error,
104 _ => UniversalTokenRole::None,
105 }
106 }
107}