oak_solidity/lexer/
token_type.rs1use oak_core::{TokenType, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub enum SolidityTokenType {
9 Eof,
11 Whitespace,
13 Comment,
15 Identifier,
17 String,
19 Number,
21 Pragma,
23 Contract,
25}
26
27impl TokenType for SolidityTokenType {
28 type Role = UniversalTokenRole;
29 const END_OF_STREAM: Self = Self::Eof;
30
31 fn is_ignored(&self) -> bool {
32 matches!(self, Self::Whitespace | Self::Comment)
33 }
34
35 fn role(&self) -> Self::Role {
36 match self {
37 Self::Eof => UniversalTokenRole::Eof,
38 Self::Whitespace => UniversalTokenRole::Whitespace,
39 Self::Comment => UniversalTokenRole::Comment,
40 Self::Identifier => UniversalTokenRole::Name,
41 Self::String | Self::Number => UniversalTokenRole::Literal,
42 Self::Pragma | Self::Contract => UniversalTokenRole::Keyword,
43 }
44 }
45}