Skip to main content

oak_tailwind/parser/
element_type.rs

1use oak_core::{ElementType, Parser, UniversalElementRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
6#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
7pub enum TailwindElementType {
8    Root,
9    Document,
10    Template,
11    Block,
12    Variable,
13    Filter,
14    Function,
15    Tag,
16    Comment,
17    Text,
18    Expression,
19    String,
20    Number,
21    Boolean,
22    Null,
23    Array,
24    Object,
25    Identifier,
26    Operator,
27    ErrorNode,
28    LeftBrace,
29    RightBrace,
30    LeftBracket,
31    RightBracket,
32    DoubleLeftBrace,
33    DoubleRightBrace,
34    LeftBracePercent,
35    PercentRightBrace,
36    LeftParen,
37    RightParen,
38    Pipe,
39    Comma,
40    Dot,
41    Colon,
42    Semicolon,
43    Eq,
44    Plus,
45    Minus,
46    Star,
47    Slash,
48    Percent,
49    Bang,
50    Question,
51    Lt,
52    Gt,
53    Amp,
54    Caret,
55    Tilde,
56    Whitespace,
57    Eof,
58    Error,
59}
60
61impl oak_core::TokenType for TailwindElementType {
62    type Role = oak_core::UniversalTokenRole;
63    const END_OF_STREAM: Self = TailwindElementType::Eof;
64
65    fn role(&self) -> Self::Role {
66        match self {
67            Self::Whitespace => oak_core::UniversalTokenRole::Whitespace,
68            Self::Comment => oak_core::UniversalTokenRole::Comment,
69            _ => oak_core::UniversalTokenRole::None,
70        }
71    }
72}
73
74impl core::fmt::Display for TailwindElementType {
75    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
76        match self {
77            TailwindElementType::Root => f.write_str("Root"),
78            TailwindElementType::Document => f.write_str("Document"),
79            TailwindElementType::Template => f.write_str("Template"),
80            TailwindElementType::Block => f.write_str("Block"),
81            TailwindElementType::Variable => f.write_str("Variable"),
82            TailwindElementType::Filter => f.write_str("Filter"),
83            TailwindElementType::Function => f.write_str("Function"),
84            TailwindElementType::Tag => f.write_str("Tag"),
85            TailwindElementType::Comment => f.write_str("Comment"),
86            TailwindElementType::Text => f.write_str("Text"),
87            TailwindElementType::Expression => f.write_str("Expression"),
88            TailwindElementType::String => f.write_str("String"),
89            TailwindElementType::Number => f.write_str("Number"),
90            TailwindElementType::Boolean => f.write_str("Boolean"),
91            TailwindElementType::Null => f.write_str("Null"),
92            TailwindElementType::Array => f.write_str("Array"),
93            TailwindElementType::Object => f.write_str("Object"),
94            TailwindElementType::Identifier => f.write_str("Identifier"),
95            TailwindElementType::Operator => f.write_str("Operator"),
96            TailwindElementType::ErrorNode => f.write_str("ErrorNode"),
97            TailwindElementType::LeftBrace => f.write_str("{"),
98            TailwindElementType::RightBrace => f.write_str("}"),
99            TailwindElementType::LeftBracket => f.write_str("["),
100            TailwindElementType::RightBracket => f.write_str("]"),
101            TailwindElementType::DoubleLeftBrace => f.write_str("{{"),
102            TailwindElementType::DoubleRightBrace => f.write_str("}}"),
103            TailwindElementType::LeftBracePercent => f.write_str("{%"),
104            TailwindElementType::PercentRightBrace => f.write_str("%}"),
105            TailwindElementType::LeftParen => f.write_str("("),
106            TailwindElementType::RightParen => f.write_str(")"),
107            TailwindElementType::Pipe => f.write_str("|"),
108            TailwindElementType::Comma => f.write_str(","),
109            TailwindElementType::Dot => f.write_str("."),
110            TailwindElementType::Colon => f.write_str(":"),
111            TailwindElementType::Semicolon => f.write_str(";"),
112            TailwindElementType::Eq => f.write_str("="),
113            TailwindElementType::Plus => f.write_str("+"),
114            TailwindElementType::Minus => f.write_str("-"),
115            TailwindElementType::Star => f.write_str("*"),
116            TailwindElementType::Slash => f.write_str("/"),
117            TailwindElementType::Percent => f.write_str("%"),
118            TailwindElementType::Bang => f.write_str("!"),
119            TailwindElementType::Question => f.write_str("?"),
120            TailwindElementType::Lt => f.write_str("<"),
121            TailwindElementType::Gt => f.write_str(">"),
122            TailwindElementType::Amp => f.write_str("&"),
123            TailwindElementType::Caret => f.write_str("^"),
124            TailwindElementType::Tilde => f.write_str("~"),
125            TailwindElementType::Whitespace => f.write_str("Whitespace"),
126            TailwindElementType::Eof => f.write_str("Eof"),
127            TailwindElementType::Error => f.write_str("Error"),
128        }
129    }
130}
131
132impl ElementType for TailwindElementType {
133    type Role = UniversalElementRole;
134
135    fn role(&self) -> Self::Role {
136        match self {
137            Self::Root => UniversalElementRole::Root,
138
139            Self::Error => UniversalElementRole::Error,
140            _ => UniversalElementRole::None,
141        }
142    }
143}
144
145impl From<crate::lexer::token_type::TailwindTokenType> for TailwindElementType {
146    fn from(token: crate::lexer::token_type::TailwindTokenType) -> Self {
147        unsafe { std::mem::transmute(token) }
148    }
149}