Skip to main content

oxc_css_parser/
ast.rs

1//! All kinds of AST nodes are here.
2
3use crate::{pos::Span, tokenizer::TokenWithSpan};
4#[cfg(feature = "variant_helpers")]
5use oxc_css_parser_macro::EnumAsIs;
6#[cfg(feature = "span_ignored_eq")]
7use oxc_css_parser_macro::SpanIgnoredEq;
8use oxc_css_parser_macro::Spanned;
9#[cfg(feature = "serialize")]
10use serde::Serialize;
11use smallvec::SmallVec;
12use std::borrow::Cow;
13
14#[derive(Clone, Debug, Spanned, PartialEq)]
15#[cfg_attr(feature = "serialize", derive(Serialize))]
16#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
17#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
18pub struct AnPlusB {
19    pub a: i32,
20    pub b: i32,
21    pub span: Span,
22}
23
24#[derive(Clone, Debug, Spanned, PartialEq)]
25#[cfg_attr(feature = "serialize", derive(Serialize))]
26#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
27#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
28pub struct AtRule<'s> {
29    pub name: Ident<'s>,
30    pub prelude: Option<AtRulePrelude<'s>>,
31    pub block: Option<SimpleBlock<'s>>,
32    pub span: Span,
33}
34
35#[derive(Clone, Debug, Spanned, PartialEq)]
36#[cfg_attr(feature = "serialize", derive(Serialize))]
37#[cfg_attr(feature = "serialize", serde(untagged))]
38#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
39#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
40pub enum AtRulePrelude<'s> {
41    Charset(Str<'s>),
42    ColorProfile(ColorProfilePrelude<'s>),
43    Container(ContainerPrelude<'s>),
44    CounterStyle(InterpolableIdent<'s>),
45    CustomMedia(Box<CustomMedia<'s>>),
46    CustomSelector(Box<CustomSelectorPrelude<'s>>),
47    Document(DocumentPrelude<'s>),
48    FontFeatureValues(FontFamilyName<'s>),
49    FontPaletteValues(InterpolableIdent<'s>),
50    Import(Box<ImportPrelude<'s>>),
51    Keyframes(KeyframesName<'s>),
52    Layer(LayerNames<'s>),
53    LessImport(Box<LessImportPrelude<'s>>),
54    LessPlugin(Box<LessPlugin<'s>>),
55    Media(MediaQueryList<'s>),
56    Namespace(Box<NamespacePrelude<'s>>),
57    Nest(SelectorList<'s>),
58    Page(PageSelectorList<'s>),
59    PositionTry(InterpolableIdent<'s>),
60    Property(InterpolableIdent<'s>),
61    SassAtRoot(SassAtRoot<'s>),
62    SassContent(SassContent<'s>),
63    SassEach(Box<SassEach<'s>>),
64    SassExpr(Box<ComponentValue<'s>>),
65    SassExtend(Box<SassExtend<'s>>),
66    SassFor(Box<SassFor<'s>>),
67    SassForward(Box<SassForward<'s>>),
68    SassFunction(Box<SassFunction<'s>>),
69    SassImport(SassImportPrelude<'s>),
70    SassInclude(Box<SassInclude<'s>>),
71    SassMixin(Box<SassMixin<'s>>),
72    SassUse(Box<SassUse<'s>>),
73    Scope(Box<ScopePrelude<'s>>),
74    ScrollTimeline(InterpolableIdent<'s>),
75    Supports(SupportsCondition<'s>),
76    Unknown(Box<UnknownAtRulePrelude<'s>>),
77}
78
79#[derive(Clone, Debug, Spanned, PartialEq)]
80#[cfg_attr(feature = "serialize", derive(Serialize))]
81#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
82#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
83pub struct AttributeSelector<'s> {
84    pub name: WqName<'s>,
85    pub matcher: Option<AttributeSelectorMatcher>,
86    pub value: Option<AttributeSelectorValue<'s>>,
87    pub modifier: Option<AttributeSelectorModifier<'s>>,
88    pub span: Span,
89}
90
91#[derive(Clone, Debug, Spanned, PartialEq)]
92#[cfg_attr(feature = "serialize", derive(Serialize))]
93#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
94#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
95pub struct AttributeSelectorMatcher {
96    pub kind: AttributeSelectorMatcherKind,
97    pub span: Span,
98}
99
100#[derive(Clone, Debug, PartialEq)]
101#[cfg_attr(feature = "serialize", derive(Serialize))]
102#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
103pub enum AttributeSelectorMatcherKind {
104    /// `=`
105    Exact,
106    /// `~=`
107    MatchWord,
108    /// `|=`
109    ExactOrPrefixThenHyphen,
110    /// `^=`
111    Prefix,
112    /// `$=`
113    Suffix,
114    /// `*=`
115    Substring,
116}
117
118#[derive(Clone, Debug, Spanned, PartialEq)]
119#[cfg_attr(feature = "serialize", derive(Serialize))]
120#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
121#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
122pub struct AttributeSelectorModifier<'s> {
123    pub ident: InterpolableIdent<'s>,
124    pub span: Span,
125}
126
127#[derive(Clone, Debug, Spanned, PartialEq)]
128#[cfg_attr(feature = "serialize", derive(Serialize))]
129#[cfg_attr(feature = "serialize", serde(untagged))]
130#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
131#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
132pub enum AttributeSelectorValue<'s> {
133    Ident(InterpolableIdent<'s>),
134    Str(InterpolableStr<'s>),
135    Percentage(Percentage<'s>),
136    LessEscapedStr(LessEscapedStr<'s>),
137}
138
139#[derive(Clone, Debug, Spanned, PartialEq)]
140#[cfg_attr(feature = "serialize", derive(Serialize))]
141#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
142#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
143pub struct BracketBlock<'s> {
144    pub value: Vec<ComponentValue<'s>>,
145    pub span: Span,
146}
147
148#[derive(Clone, Debug, Spanned, PartialEq)]
149#[cfg_attr(feature = "serialize", derive(Serialize))]
150#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
151#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
152pub struct Calc<'s> {
153    pub left: Box<ComponentValue<'s>>,
154    pub op: CalcOperator,
155    pub right: Box<ComponentValue<'s>>,
156    pub span: Span,
157}
158
159#[derive(Clone, Debug, Spanned, PartialEq)]
160#[cfg_attr(feature = "serialize", derive(Serialize))]
161#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
162#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
163pub struct CalcOperator {
164    pub kind: CalcOperatorKind,
165    pub span: Span,
166}
167
168#[derive(Clone, Debug, Spanned, PartialEq)]
169#[cfg_attr(feature = "serialize", derive(Serialize))]
170#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
171pub enum CalcOperatorKind {
172    Plus,
173    Minus,
174    Multiply,
175    Division,
176}
177
178#[derive(Clone, Debug, Spanned, PartialEq)]
179#[cfg_attr(feature = "serialize", derive(Serialize))]
180#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
181#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
182pub struct ClassSelector<'s> {
183    pub name: InterpolableIdent<'s>,
184    pub span: Span,
185}
186
187#[derive(Clone, Debug, Spanned, PartialEq)]
188#[cfg_attr(feature = "serialize", derive(Serialize))]
189#[cfg_attr(feature = "serialize", serde(untagged))]
190#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
191#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
192pub enum ColorProfilePrelude<'s> {
193    DashedIdent(InterpolableIdent<'s>),
194    DeviceCmyk(Ident<'s>),
195}
196
197#[derive(Clone, Debug, Spanned, PartialEq)]
198#[cfg_attr(feature = "serialize", derive(Serialize))]
199#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
200#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
201pub struct Combinator {
202    pub kind: CombinatorKind,
203    pub span: Span,
204}
205
206#[derive(Clone, Debug, PartialEq)]
207#[cfg_attr(feature = "serialize", derive(Serialize))]
208#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
209pub enum CombinatorKind {
210    /// ` `
211    Descendant,
212    /// `+`
213    NextSibling,
214    /// `>`
215    Child,
216    /// `~`
217    LaterSibling,
218    /// `||`
219    Column,
220}
221
222#[derive(Clone, Debug, Spanned, PartialEq)]
223#[cfg_attr(feature = "serialize", derive(Serialize))]
224#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
225#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
226pub struct ComplexSelector<'s> {
227    pub children: SmallVec<[ComplexSelectorChild<'s>; 3]>,
228    pub span: Span,
229}
230
231#[derive(Clone, Debug, Spanned, PartialEq)]
232#[cfg_attr(feature = "serialize", derive(Serialize))]
233#[cfg_attr(feature = "serialize", serde(untagged))]
234#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
235#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
236pub enum ComplexSelectorChild<'s> {
237    CompoundSelector(CompoundSelector<'s>),
238    Combinator(Combinator),
239}
240
241#[derive(Clone, Debug, Spanned, PartialEq)]
242#[cfg_attr(feature = "serialize", derive(Serialize))]
243#[cfg_attr(feature = "serialize", serde(untagged))]
244#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
245#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
246pub enum ComponentValue<'s> {
247    BracketBlock(BracketBlock<'s>),
248    Calc(Calc<'s>),
249    Delimiter(Delimiter),
250    Dimension(Dimension<'s>),
251    Function(Function<'s>),
252    HexColor(HexColor<'s>),
253    IdSelector(IdSelector<'s>),
254    ImportantAnnotation(ImportantAnnotation<'s>),
255    InterpolableIdent(InterpolableIdent<'s>),
256    InterpolableStr(InterpolableStr<'s>),
257    LayerName(LayerName<'s>),
258    LessBinaryOperation(LessBinaryOperation<'s>),
259    LessCondition(Box<LessCondition<'s>>),
260    LessDetachedRuleset(LessDetachedRuleset<'s>),
261    LessEscapedStr(LessEscapedStr<'s>),
262    LessJavaScriptSnippet(LessJavaScriptSnippet<'s>),
263    LessList(LessList<'s>),
264    LessMixinCall(LessMixinCall<'s>),
265    LessNamespaceValue(Box<LessNamespaceValue<'s>>),
266    LessNegativeValue(LessNegativeValue<'s>),
267    LessParenthesizedOperation(LessParenthesizedOperation<'s>),
268    LessPercentKeyword(LessPercentKeyword),
269    LessPropertyVariable(LessPropertyVariable<'s>),
270    LessVariable(LessVariable<'s>),
271    LessVariableVariable(LessVariableVariable<'s>),
272    Number(Number<'s>),
273    Percentage(Percentage<'s>),
274    Placeholder(Placeholder<'s>),
275    Ratio(Ratio<'s>),
276    SassArbitraryArgument(SassArbitraryArgument<'s>),
277    SassBinaryExpression(SassBinaryExpression<'s>),
278    SassKeywordArgument(SassKeywordArgument<'s>),
279    SassList(SassList<'s>),
280    SassMap(SassMap<'s>),
281    SassQualifiedName(SassQualifiedName<'s>),
282    SassNestingDeclaration(SassNestingDeclaration<'s>),
283    SassParenthesizedExpression(SassParenthesizedExpression<'s>),
284    SassParentSelector(NestingSelector<'s>),
285    SassUnaryExpression(SassUnaryExpression<'s>),
286    SassVariable(SassVariable<'s>),
287    TokenWithSpan(TokenWithSpan<'s>),
288    UnicodeRange(UnicodeRange<'s>),
289    Url(Url<'s>),
290}
291
292#[derive(Clone, Debug, Spanned, PartialEq)]
293#[cfg_attr(feature = "serialize", derive(Serialize))]
294#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
295#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
296pub struct ComponentValues<'s> {
297    pub values: Vec<ComponentValue<'s>>,
298    pub span: Span,
299}
300
301#[derive(Clone, Debug, Spanned, PartialEq)]
302#[cfg_attr(feature = "serialize", derive(Serialize))]
303#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
304#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
305pub struct CompoundSelector<'s> {
306    pub children: Vec<SimpleSelector<'s>>,
307    pub span: Span,
308}
309
310#[derive(Clone, Debug, Spanned, PartialEq)]
311#[cfg_attr(feature = "serialize", derive(Serialize))]
312#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
313#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
314pub struct CompoundSelectorList<'s> {
315    pub selectors: Vec<CompoundSelector<'s>>,
316    pub comma_spans: Vec<Span>,
317    pub span: Span,
318}
319
320#[derive(Clone, Debug, Spanned, PartialEq)]
321#[cfg_attr(feature = "serialize", derive(Serialize))]
322#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
323#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
324pub struct ContainerCondition<'s> {
325    pub conditions: Vec<ContainerConditionKind<'s>>,
326    pub span: Span,
327}
328
329#[derive(Clone, Debug, Spanned, PartialEq)]
330#[cfg_attr(feature = "serialize", derive(Serialize))]
331#[cfg_attr(feature = "serialize", serde(untagged))]
332#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
333#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
334pub enum ContainerConditionKind<'s> {
335    QueryInParens(QueryInParens<'s>),
336    And(ContainerConditionAnd<'s>),
337    Or(ContainerConditionOr<'s>),
338    Not(ContainerConditionNot<'s>),
339}
340
341#[derive(Clone, Debug, Spanned, PartialEq)]
342#[cfg_attr(feature = "serialize", derive(Serialize))]
343#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
344#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
345pub struct ContainerConditionAnd<'s> {
346    pub keyword: Ident<'s>,
347    pub query_in_parens: QueryInParens<'s>,
348    pub span: Span,
349}
350
351#[derive(Clone, Debug, Spanned, PartialEq)]
352#[cfg_attr(feature = "serialize", derive(Serialize))]
353#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
354#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
355pub struct ContainerConditionNot<'s> {
356    pub keyword: Ident<'s>,
357    pub query_in_parens: QueryInParens<'s>,
358    pub span: Span,
359}
360
361#[derive(Clone, Debug, Spanned, PartialEq)]
362#[cfg_attr(feature = "serialize", derive(Serialize))]
363#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
364#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
365pub struct ContainerConditionOr<'s> {
366    pub keyword: Ident<'s>,
367    pub query_in_parens: QueryInParens<'s>,
368    pub span: Span,
369}
370
371#[derive(Clone, Debug, Spanned, PartialEq)]
372#[cfg_attr(feature = "serialize", derive(Serialize))]
373#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
374#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
375pub struct ContainerPrelude<'s> {
376    pub name: Option<InterpolableIdent<'s>>,
377    pub condition: ContainerCondition<'s>,
378    pub span: Span,
379}
380
381#[derive(Clone, Debug, Spanned, PartialEq)]
382#[cfg_attr(feature = "serialize", derive(Serialize))]
383#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
384#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
385pub struct CustomMedia<'s> {
386    pub name: InterpolableIdent<'s>,
387    pub value: CustomMediaValue<'s>,
388    pub span: Span,
389}
390
391#[derive(Clone, Debug, Spanned, PartialEq)]
392#[cfg_attr(feature = "serialize", derive(Serialize))]
393#[cfg_attr(feature = "serialize", serde(untagged))]
394#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
395#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
396pub enum CustomMediaValue<'s> {
397    MediaQueryList(MediaQueryList<'s>),
398    True(Ident<'s>),
399    False(Ident<'s>),
400}
401
402#[derive(Clone, Debug, Spanned, PartialEq)]
403#[cfg_attr(feature = "serialize", derive(Serialize))]
404#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
405#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
406pub struct CustomSelector<'s> {
407    pub prefix_arg: Option<CustomSelectorArg<'s>>,
408    pub name: Ident<'s>,
409    pub args: Option<CustomSelectorArgs<'s>>,
410    pub span: Span,
411}
412
413#[derive(Clone, Debug, Spanned, PartialEq)]
414#[cfg_attr(feature = "serialize", derive(Serialize))]
415#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
416#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
417pub struct CustomSelectorArg<'s> {
418    pub name: Ident<'s>,
419    pub span: Span,
420}
421
422#[derive(Clone, Debug, Spanned, PartialEq)]
423#[cfg_attr(feature = "serialize", derive(Serialize))]
424#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
425#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
426pub struct CustomSelectorArgs<'s> {
427    pub args: Vec<CustomSelectorArg<'s>>,
428    pub comma_spans: Vec<Span>,
429    pub span: Span,
430}
431
432#[derive(Clone, Debug, Spanned, PartialEq)]
433#[cfg_attr(feature = "serialize", derive(Serialize))]
434#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
435#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
436pub struct CustomSelectorPrelude<'s> {
437    pub custom_selector: CustomSelector<'s>,
438    pub selector: SelectorList<'s>,
439    pub span: Span,
440}
441
442#[derive(Clone, Debug, Spanned, PartialEq)]
443#[cfg_attr(feature = "serialize", derive(Serialize))]
444#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
445#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
446pub struct Declaration<'s> {
447    pub name: InterpolableIdent<'s>,
448    pub name_suffix: Option<char>,
449    pub colon_span: Span,
450    pub value: Vec<ComponentValue<'s>>,
451    pub important: Option<ImportantAnnotation<'s>>,
452    pub less_property_merge: Option<LessPropertyMerge>,
453    pub span: Span,
454}
455
456#[derive(Clone, Debug, Spanned, PartialEq)]
457#[cfg_attr(feature = "serialize", derive(Serialize))]
458#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
459#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
460pub struct Delimiter {
461    pub kind: DelimiterKind,
462    pub span: Span,
463}
464
465#[derive(Clone, Debug, PartialEq)]
466#[cfg_attr(feature = "serialize", derive(Serialize))]
467#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
468pub enum DelimiterKind {
469    Comma,
470    Solidus,
471    Semicolon,
472}
473
474#[derive(Clone, Debug, Spanned, PartialEq)]
475#[cfg_attr(feature = "serialize", derive(Serialize))]
476#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
477#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
478pub struct Dimension<'s> {
479    pub value: Number<'s>,
480    pub unit: Ident<'s>,
481    pub kind: DimensionKind,
482    pub span: Span,
483}
484
485#[derive(Clone, Debug, Spanned, PartialEq)]
486#[cfg_attr(feature = "serialize", derive(Serialize))]
487#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
488pub enum DimensionKind {
489    Length,
490    Angle,
491    Duration,
492    Frequency,
493    Resolution,
494    Flex,
495    Unknown,
496}
497
498#[derive(Clone, Debug, Spanned, PartialEq)]
499#[cfg_attr(feature = "serialize", derive(Serialize))]
500#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
501#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
502pub struct DocumentPrelude<'s> {
503    pub matchers: Vec<DocumentPreludeMatcher<'s>>,
504    pub comma_spans: Vec<Span>,
505    pub span: Span,
506}
507
508#[derive(Clone, Debug, Spanned, PartialEq)]
509#[cfg_attr(feature = "serialize", derive(Serialize))]
510#[cfg_attr(feature = "serialize", serde(untagged))]
511#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
512#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
513pub enum DocumentPreludeMatcher<'s> {
514    Url(Url<'s>),
515    Function(Function<'s>),
516}
517
518#[derive(Clone, Debug, Spanned, PartialEq)]
519#[cfg_attr(feature = "serialize", derive(Serialize))]
520#[cfg_attr(feature = "serialize", serde(untagged))]
521#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
522#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
523pub enum FontFamilyName<'s> {
524    Str(InterpolableStr<'s>),
525    Unquoted(UnquotedFontFamilyName<'s>),
526}
527
528#[derive(Clone, Debug, Spanned, PartialEq)]
529#[cfg_attr(feature = "serialize", derive(Serialize))]
530#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
531#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
532pub struct Function<'s> {
533    pub name: FunctionName<'s>,
534    pub args: Vec<ComponentValue<'s>>,
535    pub span: Span,
536}
537
538#[derive(Clone, Debug, Spanned, PartialEq)]
539#[cfg_attr(feature = "serialize", derive(Serialize))]
540#[cfg_attr(feature = "serialize", serde(untagged))]
541#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
542#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
543pub enum FunctionName<'s> {
544    Ident(InterpolableIdent<'s>),
545    SassQualifiedName(Box<SassQualifiedName<'s>>),
546    LessListFunction(LessListFunction),
547    LessFormatFunction(LessFormatFunction),
548}
549
550#[derive(Clone, Debug, Spanned, PartialEq)]
551#[cfg_attr(feature = "serialize", derive(Serialize))]
552#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
553#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
554pub struct HexColor<'s> {
555    pub value: Cow<'s, str>,
556    pub raw: &'s str,
557    pub span: Span,
558}
559
560#[derive(Clone, Debug, Spanned, PartialEq)]
561#[cfg_attr(feature = "serialize", derive(Serialize))]
562#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
563#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
564pub struct Ident<'s> {
565    pub name: Cow<'s, str>,
566    pub raw: &'s str,
567    pub span: Span,
568}
569
570#[derive(Clone, Debug, Spanned, PartialEq)]
571#[cfg_attr(feature = "serialize", derive(Serialize))]
572#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
573#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
574pub struct ImportPrelude<'s> {
575    pub href: ImportPreludeHref<'s>,
576    pub layer: Option<ImportPreludeLayer<'s>>,
577    pub supports: Option<ImportPreludeSupports<'s>>,
578    pub media: Option<MediaQueryList<'s>>,
579    pub span: Span,
580}
581
582#[derive(Clone, Debug, Spanned, PartialEq)]
583#[cfg_attr(feature = "serialize", derive(Serialize))]
584#[cfg_attr(feature = "serialize", serde(untagged))]
585#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
586#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
587pub enum ImportPreludeHref<'s> {
588    Str(InterpolableStr<'s>),
589    Url(Url<'s>),
590    /// Sass only: `url(...)` whose content is not a parsable URL but is
591    /// valid SassScript, e.g. `@import url($dir+"/path");`.
592    Function(Function<'s>),
593}
594
595#[derive(Clone, Debug, Spanned, PartialEq)]
596#[cfg_attr(feature = "serialize", derive(Serialize))]
597#[cfg_attr(feature = "serialize", serde(untagged))]
598#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
599#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
600pub enum ImportPreludeLayer<'s> {
601    Empty(Ident<'s>),
602    WithName(Function<'s>),
603}
604
605#[derive(Clone, Debug, Spanned, PartialEq)]
606#[cfg_attr(feature = "serialize", derive(Serialize))]
607#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
608#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
609pub struct ImportPreludeSupports<'s> {
610    pub kind: ImportPreludeSupportsKind<'s>,
611    pub span: Span,
612}
613
614#[derive(Clone, Debug, Spanned, PartialEq)]
615#[cfg_attr(feature = "serialize", derive(Serialize))]
616#[cfg_attr(feature = "serialize", serde(untagged))]
617#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
618#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
619pub enum ImportPreludeSupportsKind<'s> {
620    SupportsCondition(SupportsCondition<'s>),
621    Declaration(Declaration<'s>),
622}
623
624#[derive(Clone, Debug, Spanned, PartialEq)]
625#[cfg_attr(feature = "serialize", derive(Serialize))]
626#[cfg_attr(feature = "serialize", serde(untagged))]
627#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
628#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
629pub enum InterpolableIdent<'s> {
630    Literal(Ident<'s>),
631    SassInterpolated(SassInterpolatedIdent<'s>),
632    LessInterpolated(LessInterpolatedIdent<'s>),
633    Placeholder(Placeholder<'s>),
634}
635
636/// An atomic backtick-delimited template placeholder node (see
637/// [`ParserOptions::template_placeholder`](crate::config::ParserOptions)),
638/// carrying the parsed decimal index. Appears in value, selector, and
639/// statement positions where a downstream formatter substitutes interpolations.
640#[derive(Clone, Debug, Spanned, PartialEq)]
641#[cfg_attr(feature = "serialize", derive(Serialize))]
642#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
643#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
644pub struct Placeholder<'s> {
645    pub index: u32,
646    /// An ident-continuation run glued directly after the placeholder
647    /// (`` `PLACEHOLDER-0`px `` -> index 0, suffix `"px"`), empty when none.
648    /// Mirrors `#{$x}px` being a single identifier rather than two tokens.
649    pub suffix: &'s str,
650    pub span: Span,
651}
652
653#[derive(Clone, Debug, Spanned, PartialEq)]
654#[cfg_attr(feature = "serialize", derive(Serialize))]
655#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
656#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
657pub struct InterpolableIdentStaticPart<'s> {
658    pub value: Cow<'s, str>,
659    pub raw: &'s str,
660    pub span: Span,
661}
662
663#[derive(Clone, Debug, Spanned, PartialEq)]
664#[cfg_attr(feature = "serialize", derive(Serialize))]
665#[cfg_attr(feature = "serialize", serde(untagged))]
666#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
667#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
668pub enum InterpolableStr<'s> {
669    Literal(Str<'s>),
670    SassInterpolated(SassInterpolatedStr<'s>),
671    LessInterpolated(LessInterpolatedStr<'s>),
672}
673
674#[derive(Clone, Debug, Spanned, PartialEq)]
675#[cfg_attr(feature = "serialize", derive(Serialize))]
676#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
677#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
678pub struct InterpolableStrStaticPart<'s> {
679    pub value: Cow<'s, str>,
680    pub raw: &'s str,
681    pub span: Span,
682}
683
684#[derive(Clone, Debug, Spanned, PartialEq)]
685#[cfg_attr(feature = "serialize", derive(Serialize))]
686#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
687#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
688pub struct InterpolableUrlStaticPart<'s> {
689    pub value: Cow<'s, str>,
690    pub raw: &'s str,
691    pub span: Span,
692}
693
694#[derive(Clone, Debug, Spanned, PartialEq)]
695#[cfg_attr(feature = "serialize", derive(Serialize))]
696#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
697#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
698pub struct IdSelector<'s> {
699    pub name: InterpolableIdent<'s>,
700    pub span: Span,
701}
702
703#[derive(Clone, Debug, Spanned, PartialEq)]
704#[cfg_attr(feature = "serialize", derive(Serialize))]
705#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
706#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
707pub struct ImportantAnnotation<'s> {
708    pub ident: Ident<'s>,
709    pub span: Span,
710}
711
712#[derive(Clone, Debug, Spanned, PartialEq)]
713#[cfg_attr(feature = "serialize", derive(Serialize))]
714#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
715#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
716pub struct KeyframeBlock<'s> {
717    pub selectors: Vec<KeyframeSelector<'s>>,
718    pub comma_spans: Vec<Span>,
719    pub block: SimpleBlock<'s>,
720    pub span: Span,
721}
722
723#[derive(Clone, Debug, Spanned, PartialEq)]
724#[cfg_attr(feature = "serialize", derive(Serialize))]
725#[cfg_attr(feature = "serialize", serde(untagged))]
726#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
727#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
728pub enum KeyframeSelector<'s> {
729    Ident(InterpolableIdent<'s>),
730    Percentage(Percentage<'s>),
731}
732
733#[derive(Clone, Debug, Spanned, PartialEq)]
734#[cfg_attr(feature = "serialize", derive(Serialize))]
735#[cfg_attr(feature = "serialize", serde(untagged))]
736#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
737#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
738pub enum KeyframesName<'s> {
739    Ident(InterpolableIdent<'s>),
740    Str(InterpolableStr<'s>),
741    LessVariable(LessVariable<'s>),
742    LessEscapedStr(LessEscapedStr<'s>),
743}
744
745#[derive(Clone, Debug, Spanned, PartialEq)]
746#[cfg_attr(feature = "serialize", derive(Serialize))]
747#[cfg_attr(feature = "serialize", serde(untagged))]
748#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
749#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
750pub enum LanguageRange<'s> {
751    Str(InterpolableStr<'s>),
752    Ident(InterpolableIdent<'s>),
753}
754
755#[derive(Clone, Debug, Spanned, PartialEq)]
756#[cfg_attr(feature = "serialize", derive(Serialize))]
757#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
758#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
759pub struct LanguageRangeList<'s> {
760    pub ranges: Vec<LanguageRange<'s>>,
761    pub comma_spans: Vec<Span>,
762    pub span: Span,
763}
764
765#[derive(Clone, Debug, Spanned, PartialEq)]
766#[cfg_attr(feature = "serialize", derive(Serialize))]
767#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
768#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
769pub struct LayerName<'s> {
770    pub idents: Vec<InterpolableIdent<'s>>,
771    pub span: Span,
772}
773
774#[derive(Clone, Debug, Spanned, PartialEq)]
775#[cfg_attr(feature = "serialize", derive(Serialize))]
776#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
777#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
778pub struct LayerNames<'s> {
779    pub names: Vec<LayerName<'s>>,
780    pub comma_spans: Vec<Span>,
781    pub span: Span,
782}
783
784#[derive(Clone, Debug, Spanned, PartialEq)]
785#[cfg_attr(feature = "serialize", derive(Serialize))]
786#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
787#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
788pub struct LessBinaryCondition<'s> {
789    pub left: Box<LessCondition<'s>>,
790    pub op: LessBinaryConditionOperator,
791    pub right: Box<LessCondition<'s>>,
792    pub span: Span,
793}
794
795#[derive(Clone, Debug, Spanned, PartialEq)]
796#[cfg_attr(feature = "serialize", derive(Serialize))]
797#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
798#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
799pub struct LessBinaryConditionOperator {
800    pub kind: LessBinaryConditionOperatorKind,
801    pub span: Span,
802}
803
804#[derive(Clone, Debug, PartialEq)]
805#[cfg_attr(feature = "serialize", derive(Serialize))]
806#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
807pub enum LessBinaryConditionOperatorKind {
808    GreaterThan,
809    GreaterThanOrEqual,
810    LessThan,
811    LessThanOrEqual,
812    Equal,
813    EqualOrGreaterThan,
814    EqualOrLessThan,
815    And,
816    Or,
817}
818
819#[derive(Clone, Debug, Spanned, PartialEq)]
820#[cfg_attr(feature = "serialize", derive(Serialize))]
821#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
822#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
823pub struct LessBinaryOperation<'s> {
824    pub left: Box<ComponentValue<'s>>,
825    pub op: LessOperationOperator,
826    pub right: Box<ComponentValue<'s>>,
827    pub span: Span,
828}
829
830#[derive(Clone, Debug, Spanned, PartialEq)]
831#[cfg_attr(feature = "serialize", derive(Serialize))]
832#[cfg_attr(feature = "serialize", serde(untagged))]
833#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
834#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
835pub enum LessCondition<'s> {
836    Binary(LessBinaryCondition<'s>),
837    Negated(LessNegatedCondition<'s>),
838    Parenthesized(LessParenthesizedCondition<'s>),
839    Value(ComponentValue<'s>),
840}
841
842#[derive(Clone, Debug, Spanned, PartialEq)]
843#[cfg_attr(feature = "serialize", derive(Serialize))]
844#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
845#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
846pub struct LessConditionalQualifiedRule<'s> {
847    pub selector: SelectorList<'s>,
848    pub guard: LessConditions<'s>,
849    pub block: SimpleBlock<'s>,
850    pub span: Span,
851}
852
853#[derive(Clone, Debug, Spanned, PartialEq)]
854#[cfg_attr(feature = "serialize", derive(Serialize))]
855#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
856#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
857pub struct LessConditions<'s> {
858    pub conditions: Vec<LessCondition<'s>>,
859    pub when_span: Span,
860    pub comma_spans: Vec<Span>,
861    pub span: Span,
862}
863
864#[derive(Clone, Debug, Spanned, PartialEq)]
865#[cfg_attr(feature = "serialize", derive(Serialize))]
866#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
867#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
868pub struct LessDetachedRuleset<'s> {
869    pub block: SimpleBlock<'s>,
870    pub span: Span,
871}
872
873#[derive(Clone, Debug, Spanned, PartialEq)]
874#[cfg_attr(feature = "serialize", derive(Serialize))]
875#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
876#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
877pub struct LessEscapedStr<'s> {
878    pub str: Str<'s>,
879    pub span: Span,
880}
881
882#[derive(Clone, Debug, Spanned, PartialEq)]
883#[cfg_attr(feature = "serialize", derive(Serialize))]
884#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
885#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
886pub struct LessExtend<'s> {
887    pub selector: ComplexSelector<'s>,
888    pub all: Option<Ident<'s>>,
889    pub span: Span,
890}
891
892#[derive(Clone, Debug, Spanned, PartialEq)]
893#[cfg_attr(feature = "serialize", derive(Serialize))]
894#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
895#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
896pub struct LessExtendList<'s> {
897    pub elements: Vec<LessExtend<'s>>,
898    pub comma_spans: Vec<Span>,
899    pub span: Span,
900}
901
902#[derive(Clone, Debug, Spanned, PartialEq)]
903#[cfg_attr(feature = "serialize", derive(Serialize))]
904#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
905#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
906pub struct LessExtendRule<'s> {
907    pub nesting_selector: NestingSelector<'s>,
908    pub name_of_extend: Ident<'s>,
909    pub extend: LessExtendList<'s>,
910    pub span: Span,
911}
912
913#[derive(Clone, Debug, Spanned, PartialEq)]
914#[cfg_attr(feature = "serialize", derive(Serialize))]
915#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
916#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
917pub struct LessFormatFunction {
918    pub span: Span,
919}
920
921#[derive(Clone, Debug, Spanned, PartialEq)]
922#[cfg_attr(feature = "serialize", derive(Serialize))]
923#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
924#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
925pub struct LessImportOptions<'s> {
926    pub names: Vec<Ident<'s>>,
927    pub comma_spans: Vec<Span>,
928    pub span: Span,
929}
930
931#[derive(Clone, Debug, Spanned, PartialEq)]
932#[cfg_attr(feature = "serialize", derive(Serialize))]
933#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
934#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
935pub struct LessImportPrelude<'s> {
936    pub href: ImportPreludeHref<'s>,
937    pub options: LessImportOptions<'s>,
938    pub media: Option<MediaQueryList<'s>>,
939    pub span: Span,
940}
941
942#[derive(Clone, Debug, Spanned, PartialEq)]
943#[cfg_attr(feature = "serialize", derive(Serialize))]
944#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
945#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
946pub struct LessInterpolatedIdent<'s> {
947    pub elements: Vec<LessInterpolatedIdentElement<'s>>,
948    pub span: Span,
949}
950
951#[derive(Clone, Debug, Spanned, PartialEq)]
952#[cfg_attr(feature = "serialize", derive(Serialize))]
953#[cfg_attr(feature = "serialize", serde(untagged))]
954#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
955#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
956pub enum LessInterpolatedIdentElement<'s> {
957    Variable(LessVariableInterpolation<'s>),
958    Property(LessPropertyInterpolation<'s>),
959    Static(InterpolableIdentStaticPart<'s>),
960}
961
962#[derive(Clone, Debug, Spanned, PartialEq)]
963#[cfg_attr(feature = "serialize", derive(Serialize))]
964#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
965#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
966pub struct LessInterpolatedStr<'s> {
967    pub elements: Vec<LessInterpolatedStrElement<'s>>,
968    pub span: Span,
969}
970
971#[derive(Clone, Debug, Spanned, PartialEq)]
972#[cfg_attr(feature = "serialize", derive(Serialize))]
973#[cfg_attr(feature = "serialize", serde(untagged))]
974#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
975#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
976pub enum LessInterpolatedStrElement<'s> {
977    Variable(LessVariableInterpolation<'s>),
978    Property(LessPropertyInterpolation<'s>),
979    Static(InterpolableStrStaticPart<'s>),
980}
981
982#[derive(Clone, Debug, Spanned, PartialEq)]
983#[cfg_attr(feature = "serialize", derive(Serialize))]
984#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
985#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
986pub struct LessJavaScriptSnippet<'s> {
987    pub code: &'s str,
988    pub raw: &'s str,
989    pub escaped: bool,
990    pub span: Span,
991}
992
993#[derive(Clone, Debug, Spanned, PartialEq)]
994#[cfg_attr(feature = "serialize", derive(Serialize))]
995#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
996#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
997pub struct LessList<'s> {
998    pub elements: Vec<ComponentValue<'s>>,
999    pub comma_spans: Option<Vec<Span>>,
1000    pub span: Span,
1001}
1002
1003#[derive(Clone, Debug, Spanned, PartialEq)]
1004#[cfg_attr(feature = "serialize", derive(Serialize))]
1005#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1006#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1007pub struct LessListFunction {
1008    pub span: Span,
1009}
1010
1011#[derive(Clone, Debug, Spanned, PartialEq)]
1012#[cfg_attr(feature = "serialize", derive(Serialize))]
1013#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1014#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1015pub struct LessLookup<'s> {
1016    pub name: Option<LessLookupName<'s>>,
1017    pub span: Span,
1018}
1019
1020#[derive(Clone, Debug, Spanned, PartialEq)]
1021#[cfg_attr(feature = "serialize", derive(Serialize))]
1022#[cfg_attr(feature = "serialize", serde(untagged))]
1023#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1024#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1025pub enum LessLookupName<'s> {
1026    LessVariable(LessVariable<'s>),
1027    LessVariableVariable(LessVariableVariable<'s>),
1028    LessPropertyVariable(LessPropertyVariable<'s>),
1029    Ident(Ident<'s>),
1030}
1031
1032#[derive(Clone, Debug, Spanned, PartialEq)]
1033#[cfg_attr(feature = "serialize", derive(Serialize))]
1034#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1035#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1036pub struct LessLookups<'s> {
1037    pub lookups: Vec<LessLookup<'s>>,
1038    pub span: Span,
1039}
1040
1041#[derive(Clone, Debug, Spanned, PartialEq)]
1042#[cfg_attr(feature = "serialize", derive(Serialize))]
1043#[cfg_attr(feature = "serialize", serde(untagged))]
1044#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1045#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1046pub enum LessMixinArgument<'s> {
1047    Named(LessMixinNamedArgument<'s>),
1048    Value(ComponentValue<'s>),
1049    Variadic(LessMixinVariadicArgument<'s>),
1050}
1051
1052#[derive(Clone, Debug, Spanned, PartialEq)]
1053#[cfg_attr(feature = "serialize", derive(Serialize))]
1054#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1055#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1056pub struct LessMixinArguments<'s> {
1057    pub args: Vec<LessMixinArgument<'s>>,
1058    pub is_comma_separated: bool,
1059    pub separator_spans: Vec<Span>,
1060    pub span: Span,
1061}
1062
1063#[derive(Clone, Debug, Spanned, PartialEq)]
1064#[cfg_attr(feature = "serialize", derive(Serialize))]
1065#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1066#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1067pub struct LessMixinCall<'s> {
1068    pub callee: LessMixinCallee<'s>,
1069    pub args: Option<LessMixinArguments<'s>>,
1070    pub important: Option<ImportantAnnotation<'s>>,
1071    pub span: Span,
1072}
1073
1074#[derive(Clone, Debug, Spanned, PartialEq)]
1075#[cfg_attr(feature = "serialize", derive(Serialize))]
1076#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1077#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1078pub struct LessMixinCallee<'s> {
1079    pub children: Vec<LessMixinCalleeChild<'s>>,
1080    pub span: Span,
1081}
1082
1083#[derive(Clone, Debug, Spanned, PartialEq)]
1084#[cfg_attr(feature = "serialize", derive(Serialize))]
1085#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1086#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1087pub struct LessMixinCalleeChild<'s> {
1088    pub name: LessMixinName<'s>,
1089    pub combinator: Option<Combinator>,
1090    pub span: Span,
1091}
1092
1093#[derive(Clone, Debug, Spanned, PartialEq)]
1094#[cfg_attr(feature = "serialize", derive(Serialize))]
1095#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1096#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1097pub struct LessMixinDefinition<'s> {
1098    pub name: LessMixinName<'s>,
1099    pub params: LessMixinParameters<'s>,
1100    pub guard: Option<LessConditions<'s>>,
1101    pub block: SimpleBlock<'s>,
1102    pub span: Span,
1103}
1104
1105#[derive(Clone, Debug, Spanned, PartialEq)]
1106#[cfg_attr(feature = "serialize", derive(Serialize))]
1107#[cfg_attr(feature = "serialize", serde(untagged))]
1108#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1109#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1110pub enum LessMixinName<'s> {
1111    ClassSelector(ClassSelector<'s>),
1112    IdSelector(IdSelector<'s>),
1113}
1114
1115#[derive(Clone, Debug, Spanned, PartialEq)]
1116#[cfg_attr(feature = "serialize", derive(Serialize))]
1117#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1118#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1119pub struct LessMixinNamedArgument<'s> {
1120    pub name: LessMixinParameterName<'s>,
1121    pub colon_span: Span,
1122    pub value: ComponentValue<'s>,
1123    pub span: Span,
1124}
1125
1126#[derive(Clone, Debug, Spanned, PartialEq)]
1127#[cfg_attr(feature = "serialize", derive(Serialize))]
1128#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1129#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1130pub struct LessMixinNamedParameter<'s> {
1131    pub name: LessMixinParameterName<'s>,
1132    pub value: Option<LessMixinNamedParameterDefaultValue<'s>>,
1133    pub span: Span,
1134}
1135
1136#[derive(Clone, Debug, Spanned, PartialEq)]
1137#[cfg_attr(feature = "serialize", derive(Serialize))]
1138#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1139#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1140pub struct LessMixinNamedParameterDefaultValue<'s> {
1141    pub colon_span: Span,
1142    pub value: ComponentValue<'s>,
1143    pub span: Span,
1144}
1145
1146#[derive(Clone, Debug, Spanned, PartialEq)]
1147#[cfg_attr(feature = "serialize", derive(Serialize))]
1148#[cfg_attr(feature = "serialize", serde(untagged))]
1149#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1150#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1151pub enum LessMixinParameter<'s> {
1152    Named(LessMixinNamedParameter<'s>),
1153    Unnamed(LessMixinUnnamedParameter<'s>),
1154    Variadic(LessMixinVariadicParameter<'s>),
1155}
1156
1157#[derive(Clone, Debug, Spanned, PartialEq)]
1158#[cfg_attr(feature = "serialize", derive(Serialize))]
1159#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1160#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1161pub struct LessMixinParameters<'s> {
1162    pub params: Vec<LessMixinParameter<'s>>,
1163    pub is_comma_separated: bool,
1164    pub separator_spans: Vec<Span>,
1165    pub span: Span,
1166}
1167
1168#[derive(Clone, Debug, Spanned, PartialEq)]
1169#[cfg_attr(feature = "serialize", derive(Serialize))]
1170#[cfg_attr(feature = "serialize", serde(untagged))]
1171#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1172#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1173pub enum LessMixinParameterName<'s> {
1174    Variable(LessVariable<'s>),
1175    PropertyVariable(LessPropertyVariable<'s>),
1176}
1177
1178#[derive(Clone, Debug, Spanned, PartialEq)]
1179#[cfg_attr(feature = "serialize", derive(Serialize))]
1180#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1181#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1182pub struct LessMixinUnnamedParameter<'s> {
1183    pub value: ComponentValue<'s>,
1184    pub span: Span,
1185}
1186
1187#[derive(Clone, Debug, Spanned, PartialEq)]
1188#[cfg_attr(feature = "serialize", derive(Serialize))]
1189#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1190#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1191pub struct LessMixinVariadicArgument<'s> {
1192    pub name: LessMixinParameterName<'s>,
1193    pub span: Span,
1194}
1195
1196#[derive(Clone, Debug, Spanned, PartialEq)]
1197#[cfg_attr(feature = "serialize", derive(Serialize))]
1198#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1199#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1200pub struct LessMixinVariadicParameter<'s> {
1201    pub name: Option<LessMixinParameterName<'s>>,
1202    pub span: Span,
1203}
1204
1205#[derive(Clone, Debug, Spanned, PartialEq)]
1206#[cfg_attr(feature = "serialize", derive(Serialize))]
1207#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1208#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1209pub struct LessNamespaceValue<'s> {
1210    pub callee: LessNamespaceValueCallee<'s>,
1211    pub lookups: LessLookups<'s>,
1212    pub span: Span,
1213}
1214
1215#[derive(Clone, Debug, Spanned, PartialEq)]
1216#[cfg_attr(feature = "serialize", derive(Serialize))]
1217#[cfg_attr(feature = "serialize", serde(untagged))]
1218#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1219#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1220pub enum LessNamespaceValueCallee<'s> {
1221    LessMixinCall(LessMixinCall<'s>),
1222    LessVariable(LessVariable<'s>),
1223}
1224
1225#[derive(Clone, Debug, Spanned, PartialEq)]
1226#[cfg_attr(feature = "serialize", derive(Serialize))]
1227#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1228#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1229pub struct LessNegatedCondition<'s> {
1230    pub condition: Box<LessCondition<'s>>,
1231    pub span: Span,
1232}
1233
1234#[derive(Clone, Debug, Spanned, PartialEq)]
1235#[cfg_attr(feature = "serialize", derive(Serialize))]
1236#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1237#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1238pub struct LessNegativeValue<'s> {
1239    pub value: Box<ComponentValue<'s>>,
1240    pub span: Span,
1241}
1242
1243#[derive(Clone, Debug, Spanned, PartialEq)]
1244#[cfg_attr(feature = "serialize", derive(Serialize))]
1245#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1246#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1247pub struct LessOperationOperator {
1248    pub kind: LessOperationOperatorKind,
1249    pub span: Span,
1250}
1251
1252#[derive(Clone, Debug, PartialEq)]
1253#[cfg_attr(feature = "serialize", derive(Serialize))]
1254#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1255pub enum LessOperationOperatorKind {
1256    Multiply,
1257    Division,
1258    Plus,
1259    Minus,
1260}
1261
1262#[derive(Clone, Debug, Spanned, PartialEq)]
1263#[cfg_attr(feature = "serialize", derive(Serialize))]
1264#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1265#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1266pub struct LessParenthesizedCondition<'s> {
1267    pub condition: Box<LessCondition<'s>>,
1268    pub span: Span,
1269}
1270
1271#[derive(Clone, Debug, Spanned, PartialEq)]
1272#[cfg_attr(feature = "serialize", derive(Serialize))]
1273#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1274#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1275pub struct LessParenthesizedOperation<'s> {
1276    pub operation: Box<ComponentValue<'s>>,
1277    pub span: Span,
1278}
1279
1280#[derive(Clone, Debug, Spanned, PartialEq)]
1281#[cfg_attr(feature = "serialize", derive(Serialize))]
1282#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1283#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1284pub struct LessPercentKeyword {
1285    pub span: Span,
1286}
1287
1288#[derive(Clone, Debug, Spanned, PartialEq)]
1289#[cfg_attr(feature = "serialize", derive(Serialize))]
1290#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1291#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1292pub struct LessPlugin<'s> {
1293    pub path: LessPluginPath<'s>,
1294    pub args: Option<TokenSeq<'s>>,
1295    pub span: Span,
1296}
1297
1298#[derive(Clone, Debug, Spanned, PartialEq)]
1299#[cfg_attr(feature = "serialize", derive(Serialize))]
1300#[cfg_attr(feature = "serialize", serde(untagged))]
1301#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1302#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1303pub enum LessPluginPath<'s> {
1304    Str(Str<'s>),
1305    Url(Url<'s>),
1306}
1307
1308#[derive(Clone, Debug, Spanned, PartialEq)]
1309#[cfg_attr(feature = "serialize", derive(Serialize))]
1310#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1311#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1312pub struct LessPropertyInterpolation<'s> {
1313    pub name: Ident<'s>,
1314    pub span: Span,
1315}
1316
1317#[derive(Clone, Debug, Spanned, PartialEq)]
1318#[cfg_attr(feature = "serialize", derive(Serialize))]
1319#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1320#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1321pub struct LessPropertyMerge {
1322    pub kind: LessPropertyMergeKind,
1323    pub span: Span,
1324}
1325
1326#[derive(Clone, Debug, Spanned, PartialEq)]
1327#[cfg_attr(feature = "serialize", derive(Serialize))]
1328#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1329pub enum LessPropertyMergeKind {
1330    Comma,
1331    Space,
1332}
1333
1334#[derive(Clone, Debug, Spanned, PartialEq)]
1335#[cfg_attr(feature = "serialize", derive(Serialize))]
1336#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1337#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1338pub struct LessPropertyVariable<'s> {
1339    pub name: Ident<'s>,
1340    pub span: Span,
1341}
1342
1343#[derive(Clone, Debug, Spanned, PartialEq)]
1344#[cfg_attr(feature = "serialize", derive(Serialize))]
1345#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1346#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1347pub struct LessVariable<'s> {
1348    pub name: Ident<'s>,
1349    pub span: Span,
1350}
1351
1352#[derive(Clone, Debug, Spanned, PartialEq)]
1353#[cfg_attr(feature = "serialize", derive(Serialize))]
1354#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1355#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1356pub struct LessVariableCall<'s> {
1357    pub variable: LessVariable<'s>,
1358    pub span: Span,
1359}
1360
1361#[derive(Clone, Debug, Spanned, PartialEq)]
1362#[cfg_attr(feature = "serialize", derive(Serialize))]
1363#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1364#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1365pub struct LessVariableDeclaration<'s> {
1366    pub name: LessVariable<'s>,
1367    pub colon_span: Span,
1368    pub value: ComponentValue<'s>,
1369    pub span: Span,
1370}
1371
1372#[derive(Clone, Debug, Spanned, PartialEq)]
1373#[cfg_attr(feature = "serialize", derive(Serialize))]
1374#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1375#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1376pub struct LessVariableInterpolation<'s> {
1377    pub name: Ident<'s>,
1378    pub span: Span,
1379}
1380
1381#[derive(Clone, Debug, Spanned, PartialEq)]
1382#[cfg_attr(feature = "serialize", derive(Serialize))]
1383#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1384#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1385pub struct LessVariableVariable<'s> {
1386    pub variable: LessVariable<'s>,
1387    pub span: Span,
1388}
1389
1390#[derive(Clone, Debug, Spanned, PartialEq)]
1391#[cfg_attr(feature = "serialize", derive(Serialize))]
1392#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1393#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1394pub struct MediaAnd<'s> {
1395    pub keyword: Ident<'s>,
1396    pub media_in_parens: MediaInParens<'s>,
1397    pub span: Span,
1398}
1399
1400#[derive(Clone, Debug, Spanned, PartialEq)]
1401#[cfg_attr(feature = "serialize", derive(Serialize))]
1402#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1403#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1404pub struct MediaCondition<'s> {
1405    pub conditions: Vec<MediaConditionKind<'s>>,
1406    pub span: Span,
1407}
1408
1409#[derive(Clone, Debug, Spanned, PartialEq)]
1410#[cfg_attr(feature = "serialize", derive(Serialize))]
1411#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1412#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1413pub struct MediaConditionAfterMediaType<'s> {
1414    pub and: Ident<'s>,
1415    pub condition: MediaCondition<'s>,
1416    pub span: Span,
1417}
1418
1419#[derive(Clone, Debug, Spanned, PartialEq)]
1420#[cfg_attr(feature = "serialize", derive(Serialize))]
1421#[cfg_attr(feature = "serialize", serde(untagged))]
1422#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1423#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1424pub enum MediaConditionKind<'s> {
1425    MediaInParens(MediaInParens<'s>),
1426    And(MediaAnd<'s>),
1427    Or(MediaOr<'s>),
1428    Not(MediaNot<'s>),
1429}
1430
1431#[derive(Clone, Debug, Spanned, PartialEq)]
1432#[cfg_attr(feature = "serialize", derive(Serialize))]
1433#[cfg_attr(feature = "serialize", serde(untagged))]
1434#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1435#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1436pub enum MediaFeature<'s> {
1437    Plain(MediaFeaturePlain<'s>),
1438    Boolean(MediaFeatureBoolean<'s>),
1439    Range(MediaFeatureRange<'s>),
1440    RangeInterval(MediaFeatureRangeInterval<'s>),
1441}
1442
1443#[derive(Clone, Debug, Spanned, PartialEq)]
1444#[cfg_attr(feature = "serialize", derive(Serialize))]
1445#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1446#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1447pub struct MediaFeatureComparison {
1448    pub kind: MediaFeatureComparisonKind,
1449    pub span: Span,
1450}
1451
1452#[derive(Clone, Debug, PartialEq)]
1453#[cfg_attr(feature = "serialize", derive(Serialize))]
1454#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1455pub enum MediaFeatureComparisonKind {
1456    LessThan,
1457    LessThanOrEqual,
1458    GreaterThan,
1459    GreaterThanOrEqual,
1460    Equal,
1461}
1462
1463#[derive(Clone, Debug, Spanned, PartialEq)]
1464#[cfg_attr(feature = "serialize", derive(Serialize))]
1465#[cfg_attr(feature = "serialize", serde(untagged))]
1466#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1467#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1468pub enum MediaFeatureName<'s> {
1469    Ident(InterpolableIdent<'s>),
1470    SassVariable(SassVariable<'s>),
1471}
1472
1473#[derive(Clone, Debug, Spanned, PartialEq)]
1474#[cfg_attr(feature = "serialize", derive(Serialize))]
1475#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1476#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1477pub struct MediaFeatureBoolean<'s> {
1478    pub name: MediaFeatureName<'s>,
1479    pub span: Span,
1480}
1481
1482#[derive(Clone, Debug, Spanned, PartialEq)]
1483#[cfg_attr(feature = "serialize", derive(Serialize))]
1484#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1485#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1486pub struct MediaFeaturePlain<'s> {
1487    pub name: MediaFeatureName<'s>,
1488    pub colon_span: Span,
1489    pub value: ComponentValue<'s>,
1490    pub span: Span,
1491}
1492
1493#[derive(Clone, Debug, Spanned, PartialEq)]
1494#[cfg_attr(feature = "serialize", derive(Serialize))]
1495#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1496#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1497pub struct MediaFeatureRange<'s> {
1498    pub left: ComponentValue<'s>,
1499    pub comparison: MediaFeatureComparison,
1500    pub right: ComponentValue<'s>,
1501    pub span: Span,
1502}
1503
1504#[derive(Clone, Debug, Spanned, PartialEq)]
1505#[cfg_attr(feature = "serialize", derive(Serialize))]
1506#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1507#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1508pub struct MediaFeatureRangeInterval<'s> {
1509    pub left: ComponentValue<'s>,
1510    pub left_comparison: MediaFeatureComparison,
1511    pub name: MediaFeatureName<'s>,
1512    pub right_comparison: MediaFeatureComparison,
1513    pub right: ComponentValue<'s>,
1514    pub span: Span,
1515}
1516
1517#[derive(Clone, Debug, Spanned, PartialEq)]
1518#[cfg_attr(feature = "serialize", derive(Serialize))]
1519#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1520#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1521pub struct MediaInParens<'s> {
1522    pub kind: MediaInParensKind<'s>,
1523    pub span: Span,
1524}
1525
1526#[derive(Clone, Debug, Spanned, PartialEq)]
1527#[cfg_attr(feature = "serialize", derive(Serialize))]
1528#[cfg_attr(feature = "serialize", serde(untagged))]
1529#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1530#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1531pub enum MediaInParensKind<'s> {
1532    MediaCondition(MediaCondition<'s>),
1533    MediaFeature(Box<MediaFeature<'s>>),
1534    SassInterpolation(SassInterpolatedIdent<'s>),
1535}
1536
1537#[derive(Clone, Debug, Spanned, PartialEq)]
1538#[cfg_attr(feature = "serialize", derive(Serialize))]
1539#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1540#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1541pub struct MediaNot<'s> {
1542    pub keyword: Ident<'s>,
1543    pub media_in_parens: MediaInParens<'s>,
1544    pub span: Span,
1545}
1546
1547#[derive(Clone, Debug, Spanned, PartialEq)]
1548#[cfg_attr(feature = "serialize", derive(Serialize))]
1549#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1550#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1551pub struct MediaOr<'s> {
1552    pub keyword: Ident<'s>,
1553    pub media_in_parens: MediaInParens<'s>,
1554    pub span: Span,
1555}
1556
1557#[derive(Clone, Debug, Spanned, PartialEq)]
1558#[cfg_attr(feature = "serialize", derive(Serialize))]
1559#[cfg_attr(feature = "serialize", serde(untagged))]
1560#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1561#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1562pub enum MediaQuery<'s> {
1563    ConditionOnly(MediaCondition<'s>),
1564    WithType(MediaQueryWithType<'s>),
1565    Function(Function<'s>),
1566    LessVariable(LessVariable<'s>),
1567    LessNamespaceValue(Box<LessNamespaceValue<'s>>),
1568}
1569
1570#[derive(Clone, Debug, Spanned, PartialEq)]
1571#[cfg_attr(feature = "serialize", derive(Serialize))]
1572#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1573#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1574pub struct MediaQueryList<'s> {
1575    pub queries: Vec<MediaQuery<'s>>,
1576    pub comma_spans: Vec<Span>,
1577    pub span: Span,
1578}
1579
1580#[derive(Clone, Debug, Spanned, PartialEq)]
1581#[cfg_attr(feature = "serialize", derive(Serialize))]
1582#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1583#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1584pub struct MediaQueryWithType<'s> {
1585    pub modifier: Option<Ident<'s>>,
1586    pub media_type: InterpolableIdent<'s>,
1587    pub condition: Option<MediaConditionAfterMediaType<'s>>,
1588    pub span: Span,
1589}
1590
1591#[derive(Clone, Debug, Spanned, PartialEq)]
1592#[cfg_attr(feature = "serialize", derive(Serialize))]
1593#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1594#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1595pub struct NamespacePrelude<'s> {
1596    pub prefix: Option<InterpolableIdent<'s>>,
1597    pub uri: NamespacePreludeUri<'s>,
1598    pub span: Span,
1599}
1600
1601#[derive(Clone, Debug, Spanned, PartialEq)]
1602#[cfg_attr(feature = "serialize", derive(Serialize))]
1603#[cfg_attr(feature = "serialize", serde(untagged))]
1604#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1605#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1606pub enum NamespacePreludeUri<'s> {
1607    Str(InterpolableStr<'s>),
1608    Url(Url<'s>),
1609}
1610
1611#[derive(Clone, Debug, Spanned, PartialEq)]
1612#[cfg_attr(feature = "serialize", derive(Serialize))]
1613#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1614#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1615pub struct NestingSelector<'s> {
1616    pub suffix: Option<InterpolableIdent<'s>>,
1617    pub span: Span,
1618}
1619
1620#[derive(Clone, Debug, Spanned, PartialEq)]
1621#[cfg_attr(feature = "serialize", derive(Serialize))]
1622#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1623#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1624pub struct NsPrefix<'s> {
1625    pub kind: Option<NsPrefixKind<'s>>,
1626    pub span: Span,
1627}
1628
1629#[derive(Clone, Debug, Spanned, PartialEq)]
1630#[cfg_attr(feature = "serialize", derive(Serialize))]
1631#[cfg_attr(feature = "serialize", serde(untagged))]
1632#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1633#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1634pub enum NsPrefixKind<'s> {
1635    Ident(InterpolableIdent<'s>),
1636    Universal(NsPrefixUniversal),
1637}
1638
1639#[derive(Clone, Debug, Spanned, PartialEq)]
1640#[cfg_attr(feature = "serialize", derive(Serialize))]
1641#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1642#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1643pub struct NsPrefixUniversal {
1644    pub span: Span,
1645}
1646
1647#[derive(Clone, Debug, Spanned, PartialEq)]
1648#[cfg_attr(feature = "serialize", derive(Serialize))]
1649#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1650#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1651pub struct Nth<'s> {
1652    pub index: NthIndex<'s>,
1653    pub matcher: Option<NthMatcher<'s>>,
1654    pub span: Span,
1655}
1656
1657#[derive(Clone, Debug, Spanned, PartialEq)]
1658#[cfg_attr(feature = "serialize", derive(Serialize))]
1659#[cfg_attr(feature = "serialize", serde(untagged))]
1660#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1661#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1662pub enum NthIndex<'s> {
1663    Odd(Ident<'s>),
1664    Even(Ident<'s>),
1665    Integer(Number<'s>),
1666    AnPlusB(AnPlusB),
1667}
1668
1669#[derive(Clone, Debug, Spanned, PartialEq)]
1670#[cfg_attr(feature = "serialize", derive(Serialize))]
1671#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1672#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1673pub struct NthMatcher<'s> {
1674    pub selector: Option<SelectorList<'s>>,
1675    pub span: Span,
1676}
1677
1678#[derive(Clone, Debug, Spanned, PartialEq)]
1679#[cfg_attr(feature = "serialize", derive(Serialize))]
1680#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1681#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1682pub struct Number<'s> {
1683    pub value: f32,
1684    pub raw: &'s str,
1685    pub span: Span,
1686}
1687
1688#[derive(Clone, Debug, Spanned, PartialEq)]
1689#[cfg_attr(feature = "serialize", derive(Serialize))]
1690#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1691#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1692pub struct PageSelector<'s> {
1693    pub name: Option<InterpolableIdent<'s>>,
1694    pub pseudo: Vec<PseudoPage<'s>>,
1695    pub span: Span,
1696}
1697
1698#[derive(Clone, Debug, Spanned, PartialEq)]
1699#[cfg_attr(feature = "serialize", derive(Serialize))]
1700#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1701#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1702pub struct PageSelectorList<'s> {
1703    pub selectors: Vec<PageSelector<'s>>,
1704    pub comma_spans: Vec<Span>,
1705    pub span: Span,
1706}
1707
1708#[derive(Clone, Debug, Spanned, PartialEq)]
1709#[cfg_attr(feature = "serialize", derive(Serialize))]
1710#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1711#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1712pub struct Percentage<'s> {
1713    pub value: Number<'s>,
1714    pub span: Span,
1715}
1716
1717#[derive(Clone, Debug, Spanned, PartialEq)]
1718#[cfg_attr(feature = "serialize", derive(Serialize))]
1719#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1720#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1721pub struct PseudoClassSelector<'s> {
1722    pub name: InterpolableIdent<'s>,
1723    pub arg: Option<PseudoClassSelectorArg<'s>>,
1724    pub span: Span,
1725}
1726
1727#[derive(Clone, Debug, Spanned, PartialEq)]
1728#[cfg_attr(feature = "serialize", derive(Serialize))]
1729#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1730#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1731pub struct PseudoClassSelectorArg<'s> {
1732    pub kind: PseudoClassSelectorArgKind<'s>,
1733    pub l_paren: Span,
1734    pub r_paren: Span,
1735    pub span: Span,
1736}
1737
1738#[derive(Clone, Debug, Spanned, PartialEq)]
1739#[cfg_attr(feature = "serialize", derive(Serialize))]
1740#[cfg_attr(feature = "serialize", serde(untagged))]
1741#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1742#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1743pub enum PseudoClassSelectorArgKind<'s> {
1744    CompoundSelector(CompoundSelector<'s>),
1745    CompoundSelectorList(CompoundSelectorList<'s>),
1746    Ident(InterpolableIdent<'s>),
1747    LanguageRangeList(LanguageRangeList<'s>),
1748    Nth(Nth<'s>),
1749    Number(Number<'s>),
1750    RelativeSelectorList(RelativeSelectorList<'s>),
1751    SelectorList(SelectorList<'s>),
1752    LessExtendList(LessExtendList<'s>),
1753    TokenSeq(TokenSeq<'s>),
1754}
1755
1756#[derive(Clone, Debug, Spanned, PartialEq)]
1757#[cfg_attr(feature = "serialize", derive(Serialize))]
1758#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1759#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1760pub struct PseudoElementSelector<'s> {
1761    pub name: InterpolableIdent<'s>,
1762    pub arg: Option<PseudoElementSelectorArg<'s>>,
1763    pub span: Span,
1764}
1765
1766#[derive(Clone, Debug, Spanned, PartialEq)]
1767#[cfg_attr(feature = "serialize", derive(Serialize))]
1768#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1769#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1770pub struct PseudoElementSelectorArg<'s> {
1771    pub kind: PseudoElementSelectorArgKind<'s>,
1772    pub l_paren: Span,
1773    pub r_paren: Span,
1774    pub span: Span,
1775}
1776
1777#[derive(Clone, Debug, Spanned, PartialEq)]
1778#[cfg_attr(feature = "serialize", derive(Serialize))]
1779#[cfg_attr(feature = "serialize", serde(untagged))]
1780#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1781#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1782pub enum PseudoElementSelectorArgKind<'s> {
1783    CompoundSelector(CompoundSelector<'s>),
1784    Ident(InterpolableIdent<'s>),
1785    TokenSeq(TokenSeq<'s>),
1786}
1787
1788#[derive(Clone, Debug, Spanned, PartialEq)]
1789#[cfg_attr(feature = "serialize", derive(Serialize))]
1790#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1791#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1792pub struct PseudoPage<'s> {
1793    pub name: InterpolableIdent<'s>,
1794    pub span: Span,
1795}
1796
1797#[derive(Clone, Debug, Spanned, PartialEq)]
1798#[cfg_attr(feature = "serialize", derive(Serialize))]
1799#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1800#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1801pub struct QualifiedRule<'s> {
1802    pub selector: SelectorList<'s>,
1803    pub block: SimpleBlock<'s>,
1804    pub span: Span,
1805}
1806
1807#[derive(Clone, Debug, Spanned, PartialEq)]
1808#[cfg_attr(feature = "serialize", derive(Serialize))]
1809#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1810#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1811pub struct QueryInParens<'s> {
1812    pub kind: QueryInParensKind<'s>,
1813    pub span: Span,
1814}
1815
1816#[derive(Clone, Debug, Spanned, PartialEq)]
1817#[cfg_attr(feature = "serialize", derive(Serialize))]
1818#[cfg_attr(feature = "serialize", serde(untagged))]
1819#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1820#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1821pub enum QueryInParensKind<'s> {
1822    ContainerCondition(ContainerCondition<'s>),
1823    SizeFeature(Box<MediaFeature<'s>>),
1824    StyleQuery(StyleQuery<'s>),
1825    ScrollState(Box<MediaFeature<'s>>),
1826}
1827
1828#[derive(Clone, Debug, Spanned, PartialEq)]
1829#[cfg_attr(feature = "serialize", derive(Serialize))]
1830#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1831#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1832pub struct Ratio<'s> {
1833    pub numerator: Number<'s>,
1834    pub solidus_span: Span,
1835    pub denominator: Number<'s>,
1836    pub span: Span,
1837}
1838
1839#[derive(Clone, Debug, Spanned, PartialEq)]
1840#[cfg_attr(feature = "serialize", derive(Serialize))]
1841#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1842#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1843pub struct RelativeSelector<'s> {
1844    pub combinator: Option<Combinator>,
1845    pub complex_selector: ComplexSelector<'s>,
1846    pub span: Span,
1847}
1848
1849#[derive(Clone, Debug, Spanned, PartialEq)]
1850#[cfg_attr(feature = "serialize", derive(Serialize))]
1851#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1852#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1853pub struct RelativeSelectorList<'s> {
1854    pub selectors: Vec<RelativeSelector<'s>>,
1855    pub comma_spans: Vec<Span>,
1856    pub span: Span,
1857}
1858
1859#[derive(Clone, Debug, Spanned, PartialEq)]
1860#[cfg_attr(feature = "serialize", derive(Serialize))]
1861#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1862#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1863pub struct SassArbitraryArgument<'s> {
1864    pub value: Box<ComponentValue<'s>>,
1865    pub span: Span,
1866}
1867
1868#[derive(Clone, Debug, Spanned, PartialEq)]
1869#[cfg_attr(feature = "serialize", derive(Serialize))]
1870#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1871#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1872pub struct SassArbitraryParameter<'s> {
1873    pub name: SassVariable<'s>,
1874    pub span: Span,
1875}
1876
1877#[derive(Clone, Debug, Spanned, PartialEq)]
1878#[cfg_attr(feature = "serialize", derive(Serialize))]
1879#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1880#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1881pub struct SassAtRoot<'s> {
1882    pub kind: SassAtRootKind<'s>,
1883    pub span: Span,
1884}
1885
1886#[derive(Clone, Debug, Spanned, PartialEq)]
1887#[cfg_attr(feature = "serialize", derive(Serialize))]
1888#[cfg_attr(feature = "serialize", serde(untagged))]
1889#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1890#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1891pub enum SassAtRootKind<'s> {
1892    Selector(SelectorList<'s>),
1893    Query(SassAtRootQuery<'s>),
1894}
1895
1896#[derive(Clone, Debug, Spanned, PartialEq)]
1897#[cfg_attr(feature = "serialize", derive(Serialize))]
1898#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1899#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1900pub struct SassAtRootQuery<'s> {
1901    pub modifier: SassAtRootQueryModifier,
1902    pub colon_span: Span,
1903    /// space-separated rule names
1904    pub rules: Vec<SassAtRootQueryRule<'s>>,
1905    pub span: Span,
1906}
1907
1908#[derive(Clone, Debug, Spanned, PartialEq)]
1909#[cfg_attr(feature = "serialize", derive(Serialize))]
1910#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1911#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1912pub struct SassAtRootQueryModifier {
1913    pub kind: SassAtRootQueryModifierKind,
1914    pub span: Span,
1915}
1916
1917#[derive(Clone, Debug, PartialEq)]
1918#[cfg_attr(feature = "serialize", derive(Serialize))]
1919#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1920pub enum SassAtRootQueryModifierKind {
1921    With,
1922    Without,
1923}
1924
1925#[derive(Clone, Debug, Spanned, PartialEq)]
1926#[cfg_attr(feature = "serialize", derive(Serialize))]
1927#[cfg_attr(feature = "serialize", serde(untagged))]
1928#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1929#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
1930pub enum SassAtRootQueryRule<'s> {
1931    Ident(InterpolableIdent<'s>),
1932    Str(InterpolableStr<'s>),
1933}
1934
1935#[derive(Clone, Debug, Spanned, PartialEq)]
1936#[cfg_attr(feature = "serialize", derive(Serialize))]
1937#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1938#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1939pub struct SassBinaryExpression<'s> {
1940    pub left: Box<ComponentValue<'s>>,
1941    pub op: SassBinaryOperator,
1942    pub right: Box<ComponentValue<'s>>,
1943    pub span: Span,
1944}
1945
1946#[derive(Clone, Debug, Spanned, PartialEq)]
1947#[cfg_attr(feature = "serialize", derive(Serialize))]
1948#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1949#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1950pub struct SassBinaryOperator {
1951    pub kind: SassBinaryOperatorKind,
1952    pub span: Span,
1953}
1954
1955#[derive(Clone, Debug, PartialEq)]
1956#[cfg_attr(feature = "serialize", derive(Serialize))]
1957#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1958pub enum SassBinaryOperatorKind {
1959    Multiply,
1960    Division,
1961    Modulo,
1962    Plus,
1963    Minus,
1964    GreaterThan,
1965    GreaterThanOrEqual,
1966    LessThan,
1967    LessThanOrEqual,
1968    EqualsEquals,
1969    ExclamationEquals,
1970    And,
1971    Or,
1972}
1973
1974#[derive(Clone, Debug, Spanned, PartialEq)]
1975#[cfg_attr(feature = "serialize", derive(Serialize))]
1976#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1977#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1978pub struct SassConditionalClause<'s> {
1979    pub condition: ComponentValue<'s>,
1980    pub block: SimpleBlock<'s>,
1981    pub span: Span,
1982}
1983
1984#[derive(Clone, Debug, Spanned, PartialEq)]
1985#[cfg_attr(feature = "serialize", derive(Serialize))]
1986#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1987#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1988pub struct SassContent<'s> {
1989    pub args: Vec<ComponentValue<'s>>,
1990    pub comma_spans: Vec<Span>,
1991    pub span: Span,
1992}
1993
1994#[derive(Clone, Debug, Spanned, PartialEq)]
1995#[cfg_attr(feature = "serialize", derive(Serialize))]
1996#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
1997#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
1998pub struct SassEach<'s> {
1999    pub bindings: Vec<SassVariable<'s>>,
2000    pub comma_spans: Vec<Span>,
2001    pub in_span: Span,
2002    pub expr: ComponentValue<'s>,
2003    pub span: Span,
2004}
2005
2006#[derive(Clone, Debug, Spanned, PartialEq)]
2007#[cfg_attr(feature = "serialize", derive(Serialize))]
2008#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2009#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2010pub struct SassExtend<'s> {
2011    pub selectors: CompoundSelectorList<'s>,
2012    pub optional: Option<SassFlag<'s>>,
2013    pub span: Span,
2014}
2015
2016#[derive(Clone, Debug, Spanned, PartialEq)]
2017#[cfg_attr(feature = "serialize", derive(Serialize))]
2018#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2019#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2020pub struct SassFlag<'s> {
2021    pub keyword: Ident<'s>,
2022    pub span: Span,
2023}
2024
2025#[derive(Clone, Debug, Spanned, PartialEq)]
2026#[cfg_attr(feature = "serialize", derive(Serialize))]
2027#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2028#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2029pub struct SassFor<'s> {
2030    pub binding: SassVariable<'s>,
2031    pub from_span: Span,
2032    pub start: ComponentValue<'s>,
2033    pub end: ComponentValue<'s>,
2034    pub boundary: SassForBoundary,
2035    pub span: Span,
2036}
2037
2038#[derive(Clone, Debug, Spanned, PartialEq)]
2039#[cfg_attr(feature = "serialize", derive(Serialize))]
2040#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2041#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2042pub struct SassForBoundary {
2043    pub kind: SassForBoundaryKind,
2044    pub span: Span,
2045}
2046
2047#[derive(Clone, Debug, Spanned, PartialEq)]
2048#[cfg_attr(feature = "serialize", derive(Serialize))]
2049#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2050pub enum SassForBoundaryKind {
2051    Inclusive,
2052    Exclusive,
2053}
2054
2055#[derive(Clone, Debug, Spanned, PartialEq)]
2056#[cfg_attr(feature = "serialize", derive(Serialize))]
2057#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2058#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2059pub struct SassForward<'s> {
2060    pub path: InterpolableStr<'s>,
2061    pub prefix: Option<SassForwardPrefix<'s>>,
2062    pub visibility: Option<SassForwardVisibility<'s>>,
2063    pub config: Option<SassModuleConfig<'s>>,
2064    pub span: Span,
2065}
2066
2067#[derive(Clone, Debug, Spanned, PartialEq)]
2068#[cfg_attr(feature = "serialize", derive(Serialize))]
2069#[cfg_attr(feature = "serialize", serde(untagged))]
2070#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2071#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2072pub enum SassForwardMember<'s> {
2073    Ident(Ident<'s>),
2074    Variable(SassVariable<'s>),
2075}
2076
2077#[derive(Clone, Debug, Spanned, PartialEq)]
2078#[cfg_attr(feature = "serialize", derive(Serialize))]
2079#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2080#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2081pub struct SassForwardPrefix<'s> {
2082    pub as_span: Span,
2083    pub name: Ident<'s>,
2084    pub span: Span,
2085}
2086
2087#[derive(Clone, Debug, Spanned, PartialEq)]
2088#[cfg_attr(feature = "serialize", derive(Serialize))]
2089#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2090#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2091pub struct SassForwardVisibility<'s> {
2092    pub modifier: SassForwardVisibilityModifier,
2093    pub members: Vec<SassForwardMember<'s>>,
2094    pub comma_spans: Vec<Span>,
2095    pub span: Span,
2096}
2097
2098#[derive(Clone, Debug, Spanned, PartialEq)]
2099#[cfg_attr(feature = "serialize", derive(Serialize))]
2100#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2101#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2102pub struct SassForwardVisibilityModifier {
2103    pub kind: SassForwardVisibilityModifierKind,
2104    pub span: Span,
2105}
2106
2107#[derive(Clone, Debug, Spanned, PartialEq)]
2108#[cfg_attr(feature = "serialize", derive(Serialize))]
2109#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2110pub enum SassForwardVisibilityModifierKind {
2111    Hide,
2112    Show,
2113}
2114
2115#[derive(Clone, Debug, Spanned, PartialEq)]
2116#[cfg_attr(feature = "serialize", derive(Serialize))]
2117#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2118#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2119pub struct SassFunction<'s> {
2120    pub name: Ident<'s>,
2121    pub parameters: SassParameters<'s>,
2122    pub span: Span,
2123}
2124
2125#[derive(Clone, Debug, Spanned, PartialEq)]
2126#[cfg_attr(feature = "serialize", derive(Serialize))]
2127#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2128#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2129pub struct SassIfAtRule<'s> {
2130    pub if_clause: SassConditionalClause<'s>,
2131    pub else_if_clauses: Vec<SassConditionalClause<'s>>,
2132    pub else_clause: Option<SimpleBlock<'s>>,
2133    pub else_spans: Vec<Span>,
2134    pub span: Span,
2135}
2136
2137#[derive(Clone, Debug, Spanned, PartialEq)]
2138#[cfg_attr(feature = "serialize", derive(Serialize))]
2139#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2140#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2141pub struct SassImportPrelude<'s> {
2142    pub paths: Vec<Str<'s>>,
2143    pub comma_spans: Vec<Span>,
2144    pub span: Span,
2145}
2146
2147#[derive(Clone, Debug, Spanned, PartialEq)]
2148#[cfg_attr(feature = "serialize", derive(Serialize))]
2149#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2150#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2151pub struct SassInclude<'s> {
2152    pub name: FunctionName<'s>,
2153    pub arguments: Option<SassIncludeArgs<'s>>,
2154    pub content_block_params: Option<SassIncludeContentBlockParams<'s>>,
2155    pub span: Span,
2156}
2157
2158#[derive(Clone, Debug, Spanned, PartialEq)]
2159#[cfg_attr(feature = "serialize", derive(Serialize))]
2160#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2161#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2162pub struct SassIncludeArgs<'s> {
2163    pub args: Vec<ComponentValue<'s>>,
2164    pub comma_spans: Vec<Span>,
2165    pub span: Span,
2166}
2167
2168#[derive(Clone, Debug, Spanned, PartialEq)]
2169#[cfg_attr(feature = "serialize", derive(Serialize))]
2170#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2171#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2172pub struct SassIncludeContentBlockParams<'s> {
2173    pub using_span: Span,
2174    pub params: SassParameters<'s>,
2175    pub span: Span,
2176}
2177
2178#[derive(Clone, Debug, Spanned, PartialEq)]
2179#[cfg_attr(feature = "serialize", derive(Serialize))]
2180#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2181#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2182pub struct SassInterpolatedIdent<'s> {
2183    pub elements: Vec<SassInterpolatedIdentElement<'s>>,
2184    pub span: Span,
2185}
2186
2187#[derive(Clone, Debug, Spanned, PartialEq)]
2188#[cfg_attr(feature = "serialize", derive(Serialize))]
2189#[cfg_attr(feature = "serialize", serde(untagged))]
2190#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2191#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2192pub enum SassInterpolatedIdentElement<'s> {
2193    Expression(ComponentValue<'s>),
2194    Static(InterpolableIdentStaticPart<'s>),
2195}
2196
2197#[derive(Clone, Debug, Spanned, PartialEq)]
2198#[cfg_attr(feature = "serialize", derive(Serialize))]
2199#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2200#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2201pub struct SassInterpolatedStr<'s> {
2202    pub elements: Vec<SassInterpolatedStrElement<'s>>,
2203    pub span: Span,
2204}
2205
2206#[derive(Clone, Debug, Spanned, PartialEq)]
2207#[cfg_attr(feature = "serialize", derive(Serialize))]
2208#[cfg_attr(feature = "serialize", serde(untagged))]
2209#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2210#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2211pub enum SassInterpolatedStrElement<'s> {
2212    Expression(ComponentValue<'s>),
2213    Static(InterpolableStrStaticPart<'s>),
2214}
2215
2216#[derive(Clone, Debug, Spanned, PartialEq)]
2217#[cfg_attr(feature = "serialize", derive(Serialize))]
2218#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2219#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2220pub struct SassInterpolatedUrl<'s> {
2221    pub elements: Vec<SassInterpolatedUrlElement<'s>>,
2222    pub span: Span,
2223}
2224
2225#[derive(Clone, Debug, Spanned, PartialEq)]
2226#[cfg_attr(feature = "serialize", derive(Serialize))]
2227#[cfg_attr(feature = "serialize", serde(untagged))]
2228#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2229#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2230pub enum SassInterpolatedUrlElement<'s> {
2231    Expression(ComponentValue<'s>),
2232    Static(InterpolableUrlStaticPart<'s>),
2233}
2234
2235#[derive(Clone, Debug, Spanned, PartialEq)]
2236#[cfg_attr(feature = "serialize", derive(Serialize))]
2237#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2238#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2239pub struct SassKeywordArgument<'s> {
2240    pub name: SassVariable<'s>,
2241    pub colon_span: Span,
2242    pub value: Box<ComponentValue<'s>>,
2243    pub span: Span,
2244}
2245
2246#[derive(Clone, Debug, Spanned, PartialEq)]
2247#[cfg_attr(feature = "serialize", derive(Serialize))]
2248#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2249#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2250pub struct SassList<'s> {
2251    pub elements: Vec<ComponentValue<'s>>,
2252    pub comma_spans: Option<Vec<Span>>,
2253    pub span: Span,
2254}
2255
2256#[derive(Clone, Debug, Spanned, PartialEq)]
2257#[cfg_attr(feature = "serialize", derive(Serialize))]
2258#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2259#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2260pub struct SassMap<'s> {
2261    pub items: Vec<SassMapItem<'s>>,
2262    pub comma_spans: Vec<Span>,
2263    pub span: Span,
2264}
2265
2266#[derive(Clone, Debug, Spanned, PartialEq)]
2267#[cfg_attr(feature = "serialize", derive(Serialize))]
2268#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2269#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2270pub struct SassMapItem<'s> {
2271    pub key: ComponentValue<'s>,
2272    pub colon_span: Span,
2273    pub value: ComponentValue<'s>,
2274    pub span: Span,
2275}
2276
2277#[derive(Clone, Debug, Spanned, PartialEq)]
2278#[cfg_attr(feature = "serialize", derive(Serialize))]
2279#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2280#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2281pub struct SassMixin<'s> {
2282    pub name: Ident<'s>,
2283    pub parameters: Option<SassParameters<'s>>,
2284    pub span: Span,
2285}
2286
2287#[derive(Clone, Debug, Spanned, PartialEq)]
2288#[cfg_attr(feature = "serialize", derive(Serialize))]
2289#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2290#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2291pub struct SassModuleConfig<'s> {
2292    pub with_span: Span,
2293    pub lparen_span: Span,
2294    pub items: Vec<SassModuleConfigItem<'s>>,
2295    pub comma_spans: Vec<Span>,
2296    pub span: Span,
2297}
2298
2299#[derive(Clone, Debug, Spanned, PartialEq)]
2300#[cfg_attr(feature = "serialize", derive(Serialize))]
2301#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2302#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2303pub struct SassModuleConfigItem<'s> {
2304    pub variable: SassVariable<'s>,
2305    pub colon_span: Span,
2306    pub value: ComponentValue<'s>,
2307    pub flags: Vec<SassFlag<'s>>,
2308    pub span: Span,
2309}
2310
2311#[derive(Clone, Debug, Spanned, PartialEq)]
2312#[cfg_attr(feature = "serialize", derive(Serialize))]
2313#[cfg_attr(feature = "serialize", serde(untagged))]
2314#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2315#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2316pub enum SassModuleMemberName<'s> {
2317    Ident(Ident<'s>),
2318    Variable(SassVariable<'s>),
2319}
2320
2321#[derive(Clone, Debug, Spanned, PartialEq)]
2322#[cfg_attr(feature = "serialize", derive(Serialize))]
2323#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2324#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2325pub struct SassNestingDeclaration<'s> {
2326    pub block: SimpleBlock<'s>,
2327    pub span: Span,
2328}
2329
2330#[derive(Clone, Debug, Spanned, PartialEq)]
2331#[cfg_attr(feature = "serialize", derive(Serialize))]
2332#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2333#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2334pub struct SassParameter<'s> {
2335    pub name: SassVariable<'s>,
2336    pub default_value: Option<SassParameterDefaultValue<'s>>,
2337    pub span: Span,
2338}
2339
2340#[derive(Clone, Debug, Spanned, PartialEq)]
2341#[cfg_attr(feature = "serialize", derive(Serialize))]
2342#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2343#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2344pub struct SassParameterDefaultValue<'s> {
2345    pub colon_span: Span,
2346    pub value: ComponentValue<'s>,
2347    pub span: Span,
2348}
2349
2350#[derive(Clone, Debug, Spanned, PartialEq)]
2351#[cfg_attr(feature = "serialize", derive(Serialize))]
2352#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2353#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2354pub struct SassParameters<'s> {
2355    pub params: Vec<SassParameter<'s>>,
2356    pub arbitrary_param: Option<SassArbitraryParameter<'s>>,
2357    pub comma_spans: Vec<Span>,
2358    pub span: Span,
2359}
2360
2361#[derive(Clone, Debug, Spanned, PartialEq)]
2362#[cfg_attr(feature = "serialize", derive(Serialize))]
2363#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2364#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2365pub struct SassParenthesizedExpression<'s> {
2366    pub expr: Box<ComponentValue<'s>>,
2367    pub span: Span,
2368}
2369
2370#[derive(Clone, Debug, Spanned, PartialEq)]
2371#[cfg_attr(feature = "serialize", derive(Serialize))]
2372#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2373#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2374pub struct SassPlaceholderSelector<'s> {
2375    pub name: InterpolableIdent<'s>,
2376    pub span: Span,
2377}
2378
2379#[derive(Clone, Debug, Spanned, PartialEq)]
2380#[cfg_attr(feature = "serialize", derive(Serialize))]
2381#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2382#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2383pub struct SassQualifiedName<'s> {
2384    pub module: Ident<'s>,
2385    pub member: SassModuleMemberName<'s>,
2386    pub span: Span,
2387}
2388
2389#[derive(Clone, Debug, Spanned, PartialEq)]
2390#[cfg_attr(feature = "serialize", derive(Serialize))]
2391#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2392#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2393pub struct SassUnaryExpression<'s> {
2394    pub op: SassUnaryOperator,
2395    pub expr: Box<ComponentValue<'s>>,
2396    pub span: Span,
2397}
2398
2399#[derive(Clone, Debug, Spanned, PartialEq)]
2400#[cfg_attr(feature = "serialize", derive(Serialize))]
2401#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2402#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2403pub struct SassUnaryOperator {
2404    pub kind: SassUnaryOperatorKind,
2405    pub span: Span,
2406}
2407
2408#[derive(Clone, Debug, PartialEq)]
2409#[cfg_attr(feature = "serialize", derive(Serialize))]
2410#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2411pub enum SassUnaryOperatorKind {
2412    Plus,
2413    Minus,
2414    Not,
2415}
2416
2417#[derive(Clone, Debug, Spanned, PartialEq)]
2418#[cfg_attr(feature = "serialize", derive(Serialize))]
2419#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2420#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2421pub struct SassUnnamedNamespace {
2422    pub span: Span,
2423}
2424
2425#[derive(Clone, Debug, Spanned, PartialEq)]
2426#[cfg_attr(feature = "serialize", derive(Serialize))]
2427#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2428#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2429pub struct SassUse<'s> {
2430    pub path: InterpolableStr<'s>,
2431    pub namespace: Option<SassUseNamespace<'s>>,
2432    pub config: Option<SassModuleConfig<'s>>,
2433    pub span: Span,
2434}
2435
2436#[derive(Clone, Debug, Spanned, PartialEq)]
2437#[cfg_attr(feature = "serialize", derive(Serialize))]
2438#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2439#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2440pub struct SassUseNamespace<'s> {
2441    pub as_span: Span,
2442    pub kind: SassUseNamespaceKind<'s>,
2443    pub span: Span,
2444}
2445
2446#[derive(Clone, Debug, Spanned, PartialEq)]
2447#[cfg_attr(feature = "serialize", derive(Serialize))]
2448#[cfg_attr(feature = "serialize", serde(untagged))]
2449#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2450#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2451pub enum SassUseNamespaceKind<'s> {
2452    Named(Ident<'s>),
2453    Unnamed(SassUnnamedNamespace),
2454}
2455
2456#[derive(Clone, Debug, Spanned, PartialEq)]
2457#[cfg_attr(feature = "serialize", derive(Serialize))]
2458#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2459#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2460pub struct SassVariable<'s> {
2461    pub name: Ident<'s>,
2462    pub span: Span,
2463}
2464
2465#[derive(Clone, Debug, Spanned, PartialEq)]
2466#[cfg_attr(feature = "serialize", derive(Serialize))]
2467#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2468#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2469pub struct SassVariableDeclaration<'s> {
2470    pub namespace: Option<Ident<'s>>,
2471    pub name: SassVariable<'s>,
2472    pub colon_span: Span,
2473    pub value: ComponentValue<'s>,
2474    pub flags: Vec<SassFlag<'s>>,
2475    pub span: Span,
2476}
2477
2478#[derive(Clone, Debug, Spanned, PartialEq)]
2479#[cfg_attr(feature = "serialize", derive(Serialize))]
2480#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2481#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2482pub struct ScopeEnd<'s> {
2483    pub to_span: Span,
2484    pub lparen_span: Span,
2485    pub selector: SelectorList<'s>,
2486    pub span: Span,
2487}
2488
2489#[derive(Clone, Debug, Spanned, PartialEq)]
2490#[cfg_attr(feature = "serialize", derive(Serialize))]
2491#[cfg_attr(feature = "serialize", serde(untagged))]
2492#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2493#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2494pub enum ScopePrelude<'s> {
2495    StartOnly(ScopeStart<'s>),
2496    EndOnly(ScopeEnd<'s>),
2497    Both(ScopeStartWithEnd<'s>),
2498}
2499
2500#[derive(Clone, Debug, Spanned, PartialEq)]
2501#[cfg_attr(feature = "serialize", derive(Serialize))]
2502#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2503#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2504pub struct ScopeStart<'s> {
2505    pub selector: SelectorList<'s>,
2506    pub span: Span,
2507}
2508
2509#[derive(Clone, Debug, Spanned, PartialEq)]
2510#[cfg_attr(feature = "serialize", derive(Serialize))]
2511#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2512#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2513pub struct ScopeStartWithEnd<'s> {
2514    pub start: ScopeStart<'s>,
2515    pub end: ScopeEnd<'s>,
2516    pub span: Span,
2517}
2518
2519#[derive(Clone, Debug, Spanned, PartialEq)]
2520#[cfg_attr(feature = "serialize", derive(Serialize))]
2521#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2522#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2523pub struct SelectorList<'s> {
2524    pub selectors: Vec<ComplexSelector<'s>>,
2525    pub comma_spans: Vec<Span>,
2526    pub span: Span,
2527}
2528
2529#[derive(Clone, Debug, Spanned, PartialEq)]
2530#[cfg_attr(feature = "serialize", derive(Serialize))]
2531#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2532#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2533pub struct SimpleBlock<'s> {
2534    pub statements: Vec<Statement<'s>>,
2535    pub span: Span,
2536}
2537
2538#[derive(Clone, Debug, Spanned, PartialEq)]
2539#[cfg_attr(feature = "serialize", derive(Serialize))]
2540#[cfg_attr(feature = "serialize", serde(untagged))]
2541#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2542#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2543pub enum SimpleSelector<'s> {
2544    Class(ClassSelector<'s>),
2545    Id(IdSelector<'s>),
2546    Type(TypeSelector<'s>),
2547    Attribute(AttributeSelector<'s>),
2548    PseudoClass(PseudoClassSelector<'s>),
2549    PseudoElement(PseudoElementSelector<'s>),
2550    Nesting(NestingSelector<'s>),
2551    SassPlaceholder(SassPlaceholderSelector<'s>),
2552}
2553
2554#[derive(Clone, Debug, Spanned, PartialEq)]
2555#[cfg_attr(feature = "serialize", derive(Serialize))]
2556#[cfg_attr(feature = "serialize", serde(untagged))]
2557#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2558#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2559pub enum Statement<'s> {
2560    AtRule(AtRule<'s>),
2561    Declaration(Declaration<'s>),
2562    KeyframeBlock(KeyframeBlock<'s>),
2563    LessConditionalQualifiedRule(LessConditionalQualifiedRule<'s>),
2564    LessExtendRule(LessExtendRule<'s>),
2565    LessFunctionCall(Function<'s>),
2566    LessMixinCall(LessMixinCall<'s>),
2567    LessMixinDefinition(LessMixinDefinition<'s>),
2568    LessVariableCall(LessVariableCall<'s>),
2569    LessVariableDeclaration(LessVariableDeclaration<'s>),
2570    Placeholder(Placeholder<'s>),
2571    QualifiedRule(QualifiedRule<'s>),
2572    SassIfAtRule(SassIfAtRule<'s>),
2573    SassVariableDeclaration(SassVariableDeclaration<'s>),
2574    UnknownSassAtRule(Box<UnknownSassAtRule<'s>>),
2575}
2576
2577#[derive(Clone, Debug, Spanned, PartialEq)]
2578#[cfg_attr(feature = "serialize", derive(Serialize))]
2579#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2580#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2581pub struct Str<'s> {
2582    pub value: Cow<'s, str>,
2583    pub raw: &'s str,
2584    pub span: Span,
2585}
2586
2587#[derive(Clone, Debug, Spanned, PartialEq)]
2588#[cfg_attr(feature = "serialize", derive(Serialize))]
2589#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2590#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2591pub struct StyleCondition<'s> {
2592    pub conditions: Vec<StyleConditionKind<'s>>,
2593    pub span: Span,
2594}
2595
2596#[derive(Clone, Debug, Spanned, PartialEq)]
2597#[cfg_attr(feature = "serialize", derive(Serialize))]
2598#[cfg_attr(feature = "serialize", serde(untagged))]
2599#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2600#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2601pub enum StyleConditionKind<'s> {
2602    StyleInParens(StyleInParens<'s>),
2603    And(StyleConditionAnd<'s>),
2604    Or(StyleConditionOr<'s>),
2605    Not(StyleConditionNot<'s>),
2606}
2607
2608#[derive(Clone, Debug, Spanned, PartialEq)]
2609#[cfg_attr(feature = "serialize", derive(Serialize))]
2610#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2611#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2612pub struct StyleConditionAnd<'s> {
2613    pub keyword: Ident<'s>,
2614    pub style_in_parens: StyleInParens<'s>,
2615    pub span: Span,
2616}
2617
2618#[derive(Clone, Debug, Spanned, PartialEq)]
2619#[cfg_attr(feature = "serialize", derive(Serialize))]
2620#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2621#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2622pub struct StyleConditionNot<'s> {
2623    pub keyword: Ident<'s>,
2624    pub style_in_parens: StyleInParens<'s>,
2625    pub span: Span,
2626}
2627
2628#[derive(Clone, Debug, Spanned, PartialEq)]
2629#[cfg_attr(feature = "serialize", derive(Serialize))]
2630#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2631#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2632pub struct StyleConditionOr<'s> {
2633    pub keyword: Ident<'s>,
2634    pub style_in_parens: StyleInParens<'s>,
2635    pub span: Span,
2636}
2637
2638#[derive(Clone, Debug, Spanned, PartialEq)]
2639#[cfg_attr(feature = "serialize", derive(Serialize))]
2640#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2641#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2642pub struct StyleInParens<'s> {
2643    pub kind: StyleInParensKind<'s>,
2644    pub span: Span,
2645}
2646
2647#[derive(Clone, Debug, Spanned, PartialEq)]
2648#[cfg_attr(feature = "serialize", derive(Serialize))]
2649#[cfg_attr(feature = "serialize", serde(untagged))]
2650#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2651#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2652pub enum StyleInParensKind<'s> {
2653    Condition(StyleCondition<'s>),
2654    Feature(Declaration<'s>),
2655}
2656
2657#[derive(Clone, Debug, Spanned, PartialEq)]
2658#[cfg_attr(feature = "serialize", derive(Serialize))]
2659#[cfg_attr(feature = "serialize", serde(untagged))]
2660#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2661#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2662pub enum StyleQuery<'s> {
2663    Condition(StyleCondition<'s>),
2664    Feature(Declaration<'s>),
2665}
2666
2667#[derive(Clone, Debug, Spanned, PartialEq)]
2668#[cfg_attr(feature = "serialize", derive(Serialize))]
2669#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2670#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2671pub struct Stylesheet<'s> {
2672    pub statements: Vec<Statement<'s>>,
2673    pub span: Span,
2674}
2675
2676#[derive(Clone, Debug, Spanned, PartialEq)]
2677#[cfg_attr(feature = "serialize", derive(Serialize))]
2678#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2679#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2680pub struct SupportsAnd<'s> {
2681    pub keyword: Ident<'s>,
2682    pub condition: SupportsInParens<'s>,
2683    pub span: Span,
2684}
2685
2686#[derive(Clone, Debug, Spanned, PartialEq)]
2687#[cfg_attr(feature = "serialize", derive(Serialize))]
2688#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2689#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2690pub struct SupportsCondition<'s> {
2691    pub conditions: Vec<SupportsConditionKind<'s>>,
2692    pub span: Span,
2693}
2694
2695#[derive(Clone, Debug, Spanned, PartialEq)]
2696#[cfg_attr(feature = "serialize", derive(Serialize))]
2697#[cfg_attr(feature = "serialize", serde(untagged))]
2698#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2699#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2700pub enum SupportsConditionKind<'s> {
2701    Not(SupportsNot<'s>),
2702    And(SupportsAnd<'s>),
2703    Or(SupportsOr<'s>),
2704    SupportsInParens(SupportsInParens<'s>),
2705}
2706
2707#[derive(Clone, Debug, Spanned, PartialEq)]
2708#[cfg_attr(feature = "serialize", derive(Serialize))]
2709#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2710#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2711pub struct SupportsDecl<'s> {
2712    pub decl: Declaration<'s>,
2713    pub span: Span,
2714}
2715
2716#[derive(Clone, Debug, Spanned, PartialEq)]
2717#[cfg_attr(feature = "serialize", derive(Serialize))]
2718#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2719#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2720pub struct SupportsInParens<'s> {
2721    pub kind: SupportsInParensKind<'s>,
2722    pub span: Span,
2723}
2724
2725#[derive(Clone, Debug, Spanned, PartialEq)]
2726#[cfg_attr(feature = "serialize", derive(Serialize))]
2727#[cfg_attr(feature = "serialize", serde(untagged))]
2728#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2729#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2730pub enum SupportsInParensKind<'s> {
2731    SupportsCondition(SupportsCondition<'s>),
2732    Feature(Box<SupportsDecl<'s>>),
2733    Selector(SelectorList<'s>),
2734    Function(Function<'s>),
2735}
2736
2737#[derive(Clone, Debug, Spanned, PartialEq)]
2738#[cfg_attr(feature = "serialize", derive(Serialize))]
2739#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2740#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2741pub struct SupportsNot<'s> {
2742    pub keyword: Ident<'s>,
2743    pub condition: SupportsInParens<'s>,
2744    pub span: Span,
2745}
2746
2747#[derive(Clone, Debug, Spanned, PartialEq)]
2748#[cfg_attr(feature = "serialize", derive(Serialize))]
2749#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2750#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2751pub struct SupportsOr<'s> {
2752    pub keyword: Ident<'s>,
2753    pub condition: SupportsInParens<'s>,
2754    pub span: Span,
2755}
2756
2757#[derive(Clone, Debug, Spanned, PartialEq)]
2758#[cfg_attr(feature = "serialize", derive(Serialize))]
2759#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2760#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2761pub struct TagNameSelector<'s> {
2762    pub name: WqName<'s>,
2763    pub span: Span,
2764}
2765
2766#[derive(Clone, Debug, Spanned, PartialEq)]
2767#[cfg_attr(feature = "serialize", derive(Serialize))]
2768#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2769#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2770pub struct TokenSeq<'s> {
2771    pub tokens: Vec<TokenWithSpan<'s>>,
2772    pub span: Span,
2773}
2774
2775#[derive(Clone, Debug, Spanned, PartialEq)]
2776#[cfg_attr(feature = "serialize", derive(Serialize))]
2777#[cfg_attr(feature = "serialize", serde(untagged))]
2778#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2779#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2780pub enum TypeSelector<'s> {
2781    TagName(TagNameSelector<'s>),
2782    Universal(UniversalSelector<'s>),
2783}
2784
2785#[derive(Clone, Debug, Spanned, PartialEq)]
2786#[cfg_attr(feature = "serialize", derive(Serialize))]
2787#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2788#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2789pub struct UnicodeRange<'s> {
2790    pub prefix: char,
2791    pub start: u32,
2792    pub start_raw: &'s str,
2793    pub end: u32,
2794    pub end_raw: Option<&'s str>,
2795    pub span: Span,
2796}
2797
2798#[derive(Clone, Debug, Spanned, PartialEq)]
2799#[cfg_attr(feature = "serialize", derive(Serialize))]
2800#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2801#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2802pub struct UniversalSelector<'s> {
2803    pub prefix: Option<NsPrefix<'s>>,
2804    pub span: Span,
2805}
2806
2807#[derive(Clone, Debug, Spanned, PartialEq)]
2808#[cfg_attr(feature = "serialize", derive(Serialize))]
2809#[cfg_attr(feature = "serialize", serde(untagged))]
2810#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2811#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2812pub enum UnknownAtRulePrelude<'s> {
2813    ComponentValue(ComponentValue<'s>),
2814    TokenSeq(TokenSeq<'s>),
2815}
2816
2817#[derive(Clone, Debug, Spanned, PartialEq)]
2818#[cfg_attr(feature = "serialize", derive(Serialize))]
2819#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2820#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2821pub struct UnknownSassAtRule<'s> {
2822    pub name: InterpolableIdent<'s>,
2823    pub prelude: Option<UnknownAtRulePrelude<'s>>,
2824    pub block: Option<SimpleBlock<'s>>,
2825    pub span: Span,
2826}
2827
2828#[derive(Clone, Debug, Spanned, PartialEq)]
2829#[cfg_attr(feature = "serialize", derive(Serialize))]
2830#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2831#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2832pub struct UnquotedFontFamilyName<'s> {
2833    pub idents: Vec<InterpolableIdent<'s>>,
2834    pub span: Span,
2835}
2836
2837#[derive(Clone, Debug, Spanned, PartialEq)]
2838#[cfg_attr(feature = "serialize", derive(Serialize))]
2839#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2840#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2841pub struct Url<'s> {
2842    pub name: Ident<'s>,
2843    pub value: Option<UrlValue<'s>>,
2844    pub modifiers: Vec<UrlModifier<'s>>,
2845    pub span: Span,
2846}
2847
2848#[derive(Clone, Debug, Spanned, PartialEq)]
2849#[cfg_attr(feature = "serialize", derive(Serialize))]
2850#[cfg_attr(feature = "serialize", serde(untagged))]
2851#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2852#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2853pub enum UrlModifier<'s> {
2854    Ident(InterpolableIdent<'s>),
2855    Function(Function<'s>),
2856}
2857
2858/// `)` is excluded
2859#[derive(Clone, Debug, Spanned, PartialEq)]
2860#[cfg_attr(feature = "serialize", derive(Serialize))]
2861#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2862#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2863pub struct UrlRaw<'s> {
2864    pub value: Cow<'s, str>,
2865    pub raw: &'s str,
2866    pub span: Span,
2867}
2868
2869#[derive(Clone, Debug, Spanned, PartialEq)]
2870#[cfg_attr(feature = "serialize", derive(Serialize))]
2871#[cfg_attr(feature = "serialize", serde(untagged))]
2872#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2873#[cfg_attr(feature = "variant_helpers", derive(EnumAsIs))]
2874pub enum UrlValue<'s> {
2875    Raw(UrlRaw<'s>),
2876    SassInterpolated(SassInterpolatedUrl<'s>),
2877    Str(InterpolableStr<'s>),
2878    LessEscapedStr(LessEscapedStr<'s>),
2879}
2880
2881#[derive(Clone, Debug, Spanned, PartialEq)]
2882#[cfg_attr(feature = "serialize", derive(Serialize))]
2883#[cfg_attr(feature = "serialize", serde(tag = "type", rename_all = "camelCase"))]
2884#[cfg_attr(feature = "span_ignored_eq", derive(SpanIgnoredEq))]
2885pub struct WqName<'s> {
2886    pub name: InterpolableIdent<'s>,
2887    pub prefix: Option<NsPrefix<'s>>,
2888    pub span: Span,
2889}