oak_clojure/parser/
element_type.rs1use crate::lexer::ClojureTokenType;
2use oak_core::{ElementType, UniversalElementRole};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
7pub enum ClojureElementType {
8 Token(ClojureTokenType),
10 Root,
12 SourceFile,
14 List,
16 Vector,
18 Map,
20 Set,
22 AnonFn,
24 Error,
26}
27
28impl From<ClojureTokenType> for ClojureElementType {
29 fn from(token: ClojureTokenType) -> Self {
30 Self::Token(token)
31 }
32}
33
34impl ElementType for ClojureElementType {
35 type Role = UniversalElementRole;
36
37 fn is_root(&self) -> bool {
38 matches!(self, Self::SourceFile)
39 }
40
41 fn is_error(&self) -> bool {
42 matches!(self, Self::Error)
43 }
44
45 fn role(&self) -> Self::Role {
46 match self {
47 Self::SourceFile | Self::Root => UniversalElementRole::Root,
48 Self::List | Self::Vector | Self::Map | Self::Set | Self::AnonFn => UniversalElementRole::Container,
49 Self::Error => UniversalElementRole::Error,
50 _ => UniversalElementRole::None,
51 }
52 }
53}