Skip to main content

oak_solidity/parser/
element_type.rs

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 SolidityElementType {
8    SourceFile,
9    Eof,
10    Error,
11}
12
13impl oak_core::TokenType for SolidityElementType {
14    type Role = oak_core::UniversalTokenRole;
15    const END_OF_STREAM: Self = Self::Eof;
16
17    fn role(&self) -> Self::Role {
18        match self {
19            _ => oak_core::UniversalTokenRole::None,
20        }
21    }
22}
23
24impl SolidityElementType {
25    pub fn is_token_type(&self) -> bool {
26        true
27    }
28
29    pub fn is_element_type(&self) -> bool {
30        false
31    }
32}
33
34impl ElementType for SolidityElementType {
35    type Role = UniversalElementRole;
36
37    fn role(&self) -> Self::Role {
38        match self {
39            _ => UniversalElementRole::None,
40        }
41    }
42}
43
44impl From<crate::lexer::token_type::SolidityTokenType> for SolidityElementType {
45    fn from(token: crate::lexer::token_type::SolidityTokenType) -> Self {
46        unsafe { std::mem::transmute(token) }
47    }
48}