1use oak_core::{ElementType, Parser, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7pub enum MsilElementType {
8 Root,
10 Assembly,
11 AssemblyExtern,
12 Module,
13 Class,
14 Method,
15 Instruction,
16 Label,
17 Directive,
18 Type,
19 Identifier,
20 Number,
21 String,
22 Comment,
23 ErrorNode,
24
25 AssemblyKeyword, ExternKeyword, ModuleKeyword, ClassKeyword, MethodKeyword, PublicKeyword, PrivateKeyword, StaticKeyword, Keyword, LeftBrace, RightBrace, LeftParen, RightParen, LeftBracket, RightBracket, Dot, Colon, Semicolon, Comma, Equal, Slash, IdentifierToken,
51 NumberToken,
52 StringToken,
53
54 Whitespace,
56 CommentToken,
57 Eof,
58 Error,
59}
60
61impl ElementType for MsilElementType {
62 type Role = UniversalElementRole;
63
64 fn role(&self) -> Self::Role {
65 match self {
66 _ => UniversalElementRole::None,
67 }
68 }
69}
70
71impl From<crate::lexer::token_type::MsilTokenType> for MsilElementType {
72 fn from(token: crate::lexer::token_type::MsilTokenType) -> Self {
73 match token {
74 crate::lexer::token_type::MsilTokenType::Root => MsilElementType::Root,
75 crate::lexer::token_type::MsilTokenType::Assembly => MsilElementType::Assembly,
76 crate::lexer::token_type::MsilTokenType::AssemblyExtern => MsilElementType::AssemblyExtern,
77 crate::lexer::token_type::MsilTokenType::Module => MsilElementType::Module,
78 crate::lexer::token_type::MsilTokenType::Class => MsilElementType::Class,
79 crate::lexer::token_type::MsilTokenType::Method => MsilElementType::Method,
80 crate::lexer::token_type::MsilTokenType::Instruction => MsilElementType::Instruction,
81 crate::lexer::token_type::MsilTokenType::Label => MsilElementType::Label,
82 crate::lexer::token_type::MsilTokenType::Directive => MsilElementType::Directive,
83 crate::lexer::token_type::MsilTokenType::Type => MsilElementType::Type,
84 crate::lexer::token_type::MsilTokenType::Identifier => MsilElementType::Identifier,
85 crate::lexer::token_type::MsilTokenType::Number => MsilElementType::Number,
86 crate::lexer::token_type::MsilTokenType::String => MsilElementType::String,
87 crate::lexer::token_type::MsilTokenType::Comment => MsilElementType::Comment,
88 crate::lexer::token_type::MsilTokenType::ErrorNode => MsilElementType::ErrorNode,
89 crate::lexer::token_type::MsilTokenType::AssemblyKeyword => MsilElementType::AssemblyKeyword,
90 crate::lexer::token_type::MsilTokenType::ExternKeyword => MsilElementType::ExternKeyword,
91 crate::lexer::token_type::MsilTokenType::ModuleKeyword => MsilElementType::ModuleKeyword,
92 crate::lexer::token_type::MsilTokenType::ClassKeyword => MsilElementType::ClassKeyword,
93 crate::lexer::token_type::MsilTokenType::MethodKeyword => MsilElementType::MethodKeyword,
94 crate::lexer::token_type::MsilTokenType::PublicKeyword => MsilElementType::PublicKeyword,
95 crate::lexer::token_type::MsilTokenType::PrivateKeyword => MsilElementType::PrivateKeyword,
96 crate::lexer::token_type::MsilTokenType::StaticKeyword => MsilElementType::StaticKeyword,
97 crate::lexer::token_type::MsilTokenType::Keyword => MsilElementType::Keyword,
98 crate::lexer::token_type::MsilTokenType::LeftBrace => MsilElementType::LeftBrace,
99 crate::lexer::token_type::MsilTokenType::RightBrace => MsilElementType::RightBrace,
100 crate::lexer::token_type::MsilTokenType::LeftParen => MsilElementType::LeftParen,
101 crate::lexer::token_type::MsilTokenType::RightParen => MsilElementType::RightParen,
102 crate::lexer::token_type::MsilTokenType::LeftBracket => MsilElementType::LeftBracket,
103 crate::lexer::token_type::MsilTokenType::RightBracket => MsilElementType::RightBracket,
104 crate::lexer::token_type::MsilTokenType::Dot => MsilElementType::Dot,
105 crate::lexer::token_type::MsilTokenType::Colon => MsilElementType::Colon,
106 crate::lexer::token_type::MsilTokenType::Semicolon => MsilElementType::Semicolon,
107 crate::lexer::token_type::MsilTokenType::Comma => MsilElementType::Comma,
108 crate::lexer::token_type::MsilTokenType::Equal => MsilElementType::Equal,
109 crate::lexer::token_type::MsilTokenType::Slash => MsilElementType::Slash,
110 crate::lexer::token_type::MsilTokenType::IdentifierToken => MsilElementType::IdentifierToken,
111 crate::lexer::token_type::MsilTokenType::NumberToken => MsilElementType::NumberToken,
112 crate::lexer::token_type::MsilTokenType::StringToken => MsilElementType::StringToken,
113 crate::lexer::token_type::MsilTokenType::Whitespace => MsilElementType::Whitespace,
114 crate::lexer::token_type::MsilTokenType::CommentToken => MsilElementType::CommentToken,
115 crate::lexer::token_type::MsilTokenType::Eof => MsilElementType::Eof,
116 crate::lexer::token_type::MsilTokenType::Error => MsilElementType::Error,
117 }
118 }
119}