oak_cmd/parser/
element_type.rs1use crate::lexer::token_type::CmdTokenType;
2use oak_core::UniversalElementRole;
3
4#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub enum CmdElementType {
8 Token(CmdTokenType),
10 Root,
12 CommandStatement,
14 IfStatement,
16 ForStatement,
18 SetStatement,
20 LabelDefinition,
22 Error,
24}
25
26impl From<CmdTokenType> for CmdElementType {
27 fn from(token: CmdTokenType) -> Self {
28 Self::Token(token)
29 }
30}
31
32impl oak_core::ElementType for CmdElementType {
33 type Role = UniversalElementRole;
34
35 fn is_root(&self) -> bool {
36 matches!(self, Self::Root)
37 }
38
39 fn is_error(&self) -> bool {
40 matches!(self, Self::Error)
41 }
42
43 fn role(&self) -> Self::Role {
44 match self {
45 Self::Root => UniversalElementRole::Root,
46 Self::LabelDefinition => UniversalElementRole::Definition,
47 Self::CommandStatement | Self::IfStatement | Self::ForStatement | Self::SetStatement => UniversalElementRole::Statement,
48 Self::Error => UniversalElementRole::Error,
49 _ => UniversalElementRole::None,
50 }
51 }
52}