oak_cpp/parser/
element_type.rs1use crate::lexer::CppTokenType;
2use oak_core::{ElementType, UniversalElementRole};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
6#[repr(u16)]
7pub enum CppElementType {
8 Token(CppTokenType),
10 SourceFile,
12 Error,
14}
15
16impl From<CppTokenType> for CppElementType {
17 fn from(token: CppTokenType) -> Self {
18 Self::Token(token)
19 }
20}
21
22impl ElementType for CppElementType {
23 type Role = UniversalElementRole;
24
25 fn is_root(&self) -> bool {
26 matches!(self, Self::SourceFile)
27 }
28
29 fn is_error(&self) -> bool {
30 matches!(self, Self::Error)
31 }
32
33 fn role(&self) -> Self::Role {
34 match self {
35 Self::SourceFile => UniversalElementRole::Root,
36 Self::Error => UniversalElementRole::Error,
37 _ => UniversalElementRole::Container,
38 }
39 }
40}