Skip to main content

oak_clojure/parser/
element_type.rs

1use oak_core::{ElementType, Parser, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7pub enum ClojureElementType {
8    Token,
9    List,
10    Vector,
11    Map,
12    Set,
13    AnonFn,
14    Root,
15    SourceFile,
16    Error,
17}
18
19impl ElementType for ClojureElementType {
20    type Role = UniversalElementRole;
21
22    fn role(&self) -> Self::Role {
23        match self {
24            Self::Root => UniversalElementRole::Root,
25            Self::SourceFile => UniversalElementRole::Root,
26            Self::Error => UniversalElementRole::Error,
27            _ => UniversalElementRole::None,
28        }
29    }
30}
31
32impl From<crate::lexer::token_type::ClojureTokenType> for ClojureElementType {
33    fn from(token: crate::lexer::token_type::ClojureTokenType) -> Self {
34        unsafe { std::mem::transmute(token) }
35    }
36}