raffia/
ast.rs

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