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