oak_clojure/lexer/
token_type.rs1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
3
4pub type ClojureToken = Token<ClojureTokenType>;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub enum ClojureTokenType {
11 Token,
13 List,
15 Vector,
17 Map,
19 Set,
21 AnonFn,
23 Root,
25 SourceFile,
27 Error,
29 ListStart,
32 ListEnd,
34 VectorStart,
36 VectorEnd,
38 MapStart,
40 MapEnd,
42 SetStart,
44 AnonFnStart,
46 Quote,
48 Unquote,
50 UnquoteSplice,
52 Meta,
54 Whitespace,
56 Comment,
58 StringLiteral,
60 CharacterLiteral,
62 NumberLiteral,
64 KeywordLiteral,
66 Dispatch,
68 RegexLiteral,
70 Symbol,
72}
73
74impl TokenType for ClojureTokenType {
75 type Role = UniversalTokenRole;
76 const END_OF_STREAM: Self = Self::Error;
77
78 fn is_ignored(&self) -> bool {
79 false
80 }
81
82 fn role(&self) -> Self::Role {
83 match self {
84 Self::Error => UniversalTokenRole::Error,
85 _ => UniversalTokenRole::None,
86 }
87 }
88}