oak_clojure/parser/
element_type.rs1use oak_core::{ElementType, UniversalElementRole};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum ClojureElementType {
7 Token,
9 List,
11 Vector,
13 Map,
15 Set,
17 AnonFn,
19 Quotation,
21 Meta,
23 Root,
25 SourceFile,
27 Error,
29}
30
31impl ElementType for ClojureElementType {
32 type Role = UniversalElementRole;
33
34 fn role(&self) -> Self::Role {
35 match self {
36 Self::Root => UniversalElementRole::Root,
37 Self::SourceFile => UniversalElementRole::Root,
38 Self::Error => UniversalElementRole::Error,
39 Self::List | Self::Vector | Self::Map | Self::Set | Self::AnonFn | Self::Quotation | Self::Meta => UniversalElementRole::Expression,
40 _ => UniversalElementRole::None,
41 }
42 }
43}
44
45impl From<crate::lexer::token_type::ClojureTokenType> for ClojureElementType {
46 fn from(token: crate::lexer::token_type::ClojureTokenType) -> Self {
47 use crate::lexer::token_type::ClojureTokenType as T;
48 match token {
49 T::Token => Self::Token,
50 T::List => Self::List,
51 T::Vector => Self::Vector,
52 T::Map => Self::Map,
53 T::Set => Self::Set,
54 T::AnonFn => Self::AnonFn,
55 T::Root => Self::Root,
56 T::SourceFile => Self::SourceFile,
57 T::Error => Self::Error,
58 T::ListStart => Self::Token,
59 T::ListEnd => Self::Token,
60 T::VectorStart => Self::Token,
61 T::VectorEnd => Self::Token,
62 T::MapStart => Self::Token,
63 T::MapEnd => Self::Token,
64 T::SetStart => Self::Token,
65 T::AnonFnStart => Self::Token,
66 T::Quote => Self::Token,
67 T::Unquote => Self::Token,
68 T::UnquoteSplice => Self::Token,
69 T::Meta => Self::Token,
70 T::Whitespace => Self::Token,
71 T::Comment => Self::Token,
72 T::StringLiteral => Self::Token,
73 T::CharacterLiteral => Self::Token,
74 T::NumberLiteral => Self::Token,
75 T::KeywordLiteral => Self::Token,
76 T::Dispatch => Self::Token,
77 T::RegexLiteral => Self::Token,
78 T::Symbol => Self::Token,
79 }
80 }
81}