use oak_core::{ElementType, UniversalElementRole};
use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum WolframElementType {
Root,
Expression,
Call,
Arguments,
List,
Symbol,
Literal,
BinaryExpr,
PrefixExpr,
PostfixExpr,
Error,
}
impl fmt::Display for WolframElementType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{:?}", self)
}
}
impl ElementType for WolframElementType {
type Role = UniversalElementRole;
fn role(&self) -> Self::Role {
match self {
_ => UniversalElementRole::None,
}
}
}
impl From<crate::lexer::token_type::WolframTokenType> for WolframElementType {
fn from(token: crate::lexer::token_type::WolframTokenType) -> Self {
match token {
crate::lexer::token_type::WolframTokenType::Root => Self::Root,
crate::lexer::token_type::WolframTokenType::Identifier => Self::Symbol,
crate::lexer::token_type::WolframTokenType::Integer | crate::lexer::token_type::WolframTokenType::Real | crate::lexer::token_type::WolframTokenType::String => Self::Literal,
_ => Self::Error,
}
}
}