Skip to main content

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}