oak_liquid/lexer/token_type.rs
1/// Liquid Token Type module
2///
3/// This module defines the token types for Liquid templates.
4use oak_core::{TokenType, UniversalTokenRole};
5
6/// Token types for Liquid templates
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub enum LiquidTokenType {
10 /// Text content
11 Text,
12 /// Opening delimiter: {{
13 DoubleLeftBrace,
14 /// Closing delimiter: }}
15 DoubleRightBrace,
16 /// Opening block delimiter: {%
17 LeftBracePercent,
18 /// Closing block delimiter: %}
19 PercentRightBrace,
20 /// Identifier
21 Identifier,
22 /// String literal
23 String,
24 /// Number literal
25 Number,
26 /// Boolean literal
27 Boolean,
28 /// Left brace: {
29 LeftBrace,
30 /// Right brace: }
31 RightBrace,
32 /// Left parenthesis: (
33 LeftParen,
34 /// Right parenthesis: )
35 RightParen,
36 /// Left bracket: [
37 LeftBracket,
38 /// Right bracket: ]
39 RightBracket,
40 /// Comma: ,
41 Comma,
42 /// Dot: .
43 Dot,
44 /// Colon: :
45 Colon,
46 /// Semicolon: ;
47 Semicolon,
48 /// Pipe: |
49 Pipe,
50 /// Equals: =
51 Eq,
52 /// Plus: +
53 Plus,
54 /// Minus: -
55 Minus,
56 /// Star: *
57 Star,
58 /// Slash: /
59 Slash,
60 /// Percent: %
61 Percent,
62 /// Bang: !
63 Bang,
64 /// Question: ?
65 Question,
66 /// Less than: <
67 Lt,
68 /// Greater than: >
69 Gt,
70 /// Ampersand: &
71 Amp,
72 /// Caret: ^
73 Caret,
74 /// Tilde: ~
75 Tilde,
76 /// Whitespace
77 Whitespace,
78 /// Comment
79 Comment,
80 /// End of file
81 Eof,
82 /// Error
83 Error,
84}
85
86impl TokenType for LiquidTokenType {
87 type Role = UniversalTokenRole;
88 const END_OF_STREAM: Self = Self::Eof;
89
90 fn is_ignored(&self) -> bool {
91 matches!(self, Self::Whitespace | Self::Comment)
92 }
93
94 fn role(&self) -> Self::Role {
95 match self {
96 Self::Whitespace => UniversalTokenRole::Whitespace,
97 Self::Comment => UniversalTokenRole::Comment,
98 Self::Eof => UniversalTokenRole::Eof,
99 Self::Error => UniversalTokenRole::Error,
100 _ => UniversalTokenRole::None,
101 }
102 }
103}