oak_wolfram/parser/
element_type.rs1use oak_core::{ElementType, UniversalElementRole};
2use std::fmt;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub enum WolframElementType {
8 Root,
10 Expression,
13 Call,
16 Arguments,
19 List,
22 Symbol,
25 Literal,
28 BinaryExpr,
31 PrefixExpr,
34 PostfixExpr,
37 Error,
40}
41
42impl fmt::Display for WolframElementType {
43 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
44 write!(f, "{:?}", self)
45 }
46}
47
48impl ElementType for WolframElementType {
49 type Role = UniversalElementRole;
50
51 fn role(&self) -> Self::Role {
52 match self {
53 _ => UniversalElementRole::None,
54 }
55 }
56}
57
58impl From<crate::lexer::token_type::WolframTokenType> for WolframElementType {
59 fn from(token: crate::lexer::token_type::WolframTokenType) -> Self {
60 match token {
61 crate::lexer::token_type::WolframTokenType::Root => Self::Root,
62 crate::lexer::token_type::WolframTokenType::Identifier => Self::Symbol,
63 crate::lexer::token_type::WolframTokenType::Integer | crate::lexer::token_type::WolframTokenType::Real | crate::lexer::token_type::WolframTokenType::String => Self::Literal,
64 _ => Self::Error,
65 }
66 }
67}