1#![doc = include_str!("readme.md")]
2use core::range::Range;
4#[cfg(feature = "serde")]
5#[allow(unused_imports)]
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, PartialEq, Eq)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub struct TailwindRoot {
12 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
14 pub span: Range<usize>,
15 pub children: Vec<TailwindNode>,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
22pub enum TailwindNode {
23 Directive(TailwindDirective),
25 Class(TailwindClass),
27 Comment(TailwindComment),
29}
30
31#[derive(Debug, Clone, PartialEq, Eq)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34pub struct TailwindClass {
35 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
37 pub span: Range<usize>,
38 pub is_important: bool,
40 pub modifiers: Vec<TailwindModifier>,
42 pub kind: TailwindClassKind,
44}
45
46#[derive(Debug, Clone, PartialEq, Eq)]
48#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
49pub enum TailwindClassKind {
50 Utility(TailwindUtility),
52 ArbitraryValue(TailwindArbitraryValue),
54}
55
56#[derive(Debug, Clone, PartialEq, Eq)]
58#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
59pub struct TailwindModifier {
60 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
62 pub span: Range<usize>,
63 pub name: String,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq)]
69#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
70pub struct TailwindUtility {
71 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
73 pub span: Range<usize>,
74 pub name: String,
76}
77
78#[derive(Debug, Clone, PartialEq, Eq)]
80#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
81pub struct TailwindArbitraryValue {
82 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
84 pub span: Range<usize>,
85 pub value: String,
87}
88
89#[derive(Debug, Clone, PartialEq, Eq)]
91#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
92pub struct TailwindDirective {
93 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
95 pub span: Range<usize>,
96 pub name: String,
98 pub body: Option<String>,
100}
101
102#[derive(Debug, Clone, PartialEq, Eq)]
104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
105pub struct TailwindComment {
106 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
108 pub span: Range<usize>,
109 pub content: String,
111}
112
113impl TailwindRoot {
114 pub fn new(span: Range<usize>, children: Vec<TailwindNode>) -> Self {
116 Self { span, children }
117 }
118}