oak_cpp/parser/
element_type.rs

1use 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    /// A wrapper for tokens
9    Token(CppTokenType),
10    /// Root node of the source file
11    SourceFile,
12    /// Error token
13    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}