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