1use oak_core::{ElementType, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub enum MsilElementType {
9 Root,
11 Assembly,
13 AssemblyExtern,
15 Module,
17 Class,
19 Method,
21 Instruction,
23 Label,
25 Directive,
27 Type,
29 Identifier,
31 Number,
33 String,
35 Comment,
37 ErrorNode,
39
40 AssemblyKeyword,
42 ExternKeyword,
44 ModuleKeyword,
46 ClassKeyword,
48 MethodKeyword,
50 PublicKeyword,
52 PrivateKeyword,
54 StaticKeyword,
56 Keyword,
58
59 LeftBrace,
61 RightBrace,
63 LeftParen,
65 RightParen,
67 LeftBracket,
69 RightBracket,
71 Dot,
73 Colon,
75 Semicolon,
77 Comma,
79 Equal,
81 Slash,
83
84 IdentifierToken,
86 NumberToken,
88 StringToken,
90
91 Whitespace,
93 CommentToken,
95 Eof,
97 Error,
99}
100
101impl ElementType for MsilElementType {
102 type Role = UniversalElementRole;
103
104 fn role(&self) -> Self::Role {
105 match self {
106 Self::Root => UniversalElementRole::Root,
107 Self::Assembly | Self::AssemblyExtern | Self::Module | Self::Class | Self::Method | Self::Directive => UniversalElementRole::Definition,
108 Self::Instruction => UniversalElementRole::Statement,
109 Self::Type | Self::Identifier => UniversalElementRole::Typing,
110 Self::Number | Self::String => UniversalElementRole::Value,
111 Self::Comment => UniversalElementRole::Documentation,
112 Self::Error | Self::ErrorNode => UniversalElementRole::Error,
113 _ => UniversalElementRole::None,
114 }
115 }
116}
117
118impl From<crate::lexer::token_type::MsilTokenType> for MsilElementType {
119 fn from(token: crate::lexer::token_type::MsilTokenType) -> Self {
120 match token {
121 crate::lexer::token_type::MsilTokenType::Root => MsilElementType::Root,
122 crate::lexer::token_type::MsilTokenType::Assembly => MsilElementType::Assembly,
123 crate::lexer::token_type::MsilTokenType::AssemblyExtern => MsilElementType::AssemblyExtern,
124 crate::lexer::token_type::MsilTokenType::Module => MsilElementType::Module,
125 crate::lexer::token_type::MsilTokenType::Class => MsilElementType::Class,
126 crate::lexer::token_type::MsilTokenType::Method => MsilElementType::Method,
127 crate::lexer::token_type::MsilTokenType::Instruction => MsilElementType::Instruction,
128 crate::lexer::token_type::MsilTokenType::Label => MsilElementType::Label,
129 crate::lexer::token_type::MsilTokenType::Directive => MsilElementType::Directive,
130 crate::lexer::token_type::MsilTokenType::Type => MsilElementType::Type,
131 crate::lexer::token_type::MsilTokenType::Identifier => MsilElementType::Identifier,
132 crate::lexer::token_type::MsilTokenType::Number => MsilElementType::Number,
133 crate::lexer::token_type::MsilTokenType::String => MsilElementType::String,
134 crate::lexer::token_type::MsilTokenType::Comment => MsilElementType::Comment,
135 crate::lexer::token_type::MsilTokenType::ErrorNode => MsilElementType::ErrorNode,
136 crate::lexer::token_type::MsilTokenType::AssemblyKeyword => MsilElementType::AssemblyKeyword,
137 crate::lexer::token_type::MsilTokenType::ExternKeyword => MsilElementType::ExternKeyword,
138 crate::lexer::token_type::MsilTokenType::ModuleKeyword => MsilElementType::ModuleKeyword,
139 crate::lexer::token_type::MsilTokenType::ClassKeyword => MsilElementType::ClassKeyword,
140 crate::lexer::token_type::MsilTokenType::MethodKeyword => MsilElementType::MethodKeyword,
141 crate::lexer::token_type::MsilTokenType::PublicKeyword => MsilElementType::PublicKeyword,
142 crate::lexer::token_type::MsilTokenType::PrivateKeyword => MsilElementType::PrivateKeyword,
143 crate::lexer::token_type::MsilTokenType::StaticKeyword => MsilElementType::StaticKeyword,
144 crate::lexer::token_type::MsilTokenType::Keyword => MsilElementType::Keyword,
145 crate::lexer::token_type::MsilTokenType::LeftBrace => MsilElementType::LeftBrace,
146 crate::lexer::token_type::MsilTokenType::RightBrace => MsilElementType::RightBrace,
147 crate::lexer::token_type::MsilTokenType::LeftParen => MsilElementType::LeftParen,
148 crate::lexer::token_type::MsilTokenType::RightParen => MsilElementType::RightParen,
149 crate::lexer::token_type::MsilTokenType::LeftBracket => MsilElementType::LeftBracket,
150 crate::lexer::token_type::MsilTokenType::RightBracket => MsilElementType::RightBracket,
151 crate::lexer::token_type::MsilTokenType::Dot => MsilElementType::Dot,
152 crate::lexer::token_type::MsilTokenType::Colon => MsilElementType::Colon,
153 crate::lexer::token_type::MsilTokenType::Semicolon => MsilElementType::Semicolon,
154 crate::lexer::token_type::MsilTokenType::Comma => MsilElementType::Comma,
155 crate::lexer::token_type::MsilTokenType::Equal => MsilElementType::Equal,
156 crate::lexer::token_type::MsilTokenType::Slash => MsilElementType::Slash,
157 crate::lexer::token_type::MsilTokenType::IdentifierToken => MsilElementType::IdentifierToken,
158 crate::lexer::token_type::MsilTokenType::NumberToken => MsilElementType::NumberToken,
159 crate::lexer::token_type::MsilTokenType::StringToken => MsilElementType::StringToken,
160 crate::lexer::token_type::MsilTokenType::Whitespace => MsilElementType::Whitespace,
161 crate::lexer::token_type::MsilTokenType::CommentToken => MsilElementType::CommentToken,
162 crate::lexer::token_type::MsilTokenType::Eof => MsilElementType::Eof,
163 crate::lexer::token_type::MsilTokenType::Error => MsilElementType::Error,
164 }
165 }
166}