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