@@ -378,19 +378,110 @@ impl_tocss_for_float!(f32);
378
378
impl_tocss_for_float ! ( f64 ) ;
379
379
380
380
/// A category of token. See the `needs_separator_when_before` method.
381
- #[ derive( Copy , Clone , Eq , PartialEq , Debug ) ]
382
- pub struct TokenSerializationType ( TokenSerializationTypeVariants ) ;
381
+ #[ derive( Copy , Clone , Eq , PartialEq , Debug , Default ) ]
382
+ pub enum TokenSerializationType {
383
+ /// No token serialization type.
384
+ #[ default]
385
+ Nothing ,
386
+
387
+ /// The [`<whitespace-token>`](https://drafts.csswg.org/css-syntax/#whitespace-token-diagram)
388
+ /// type.
389
+ WhiteSpace ,
390
+
391
+ /// The [`<at-keyword-token>`](https://drafts.csswg.org/css-syntax/#at-keyword-token-diagram)
392
+ /// type, the "[`<hash-token>`](https://drafts.csswg.org/css-syntax/#hash-token-diagram) with
393
+ /// the type flag set to 'unrestricted'" type, or the
394
+ /// "[`<hash-token>`](https://drafts.csswg.org/css-syntax/#hash-token-diagram) with the type
395
+ /// flag set to 'id'" type.
396
+ AtKeywordOrHash ,
397
+
398
+ /// The [`<number-token>`](https://drafts.csswg.org/css-syntax/#number-token-diagram) type.
399
+ Number ,
400
+
401
+ /// The [`<dimension-token>`](https://drafts.csswg.org/css-syntax/#dimension-token-diagram)
402
+ /// type.
403
+ Dimension ,
404
+
405
+ /// The [`<percentage-token>`](https://drafts.csswg.org/css-syntax/#percentage-token-diagram)
406
+ /// type.
407
+ Percentage ,
408
+
409
+ /// The [`<url-token>`](https://drafts.csswg.org/css-syntax/#url-token-diagram) or
410
+ /// `<bad-url-token>` type.
411
+ UrlOrBadUrl ,
412
+
413
+ /// The [`<function-token>`](https://drafts.csswg.org/css-syntax/#function-token-diagram) type.
414
+ Function ,
415
+
416
+ /// The [`<ident-token>`](https://drafts.csswg.org/css-syntax/#ident-token-diagram) type.
417
+ Ident ,
418
+
419
+ /// The `-->` [`<CDC-token>`](https://drafts.csswg.org/css-syntax/#CDC-token-diagram) type.
420
+ CDC ,
421
+
422
+ /// The `|=`
423
+ /// [`<dash-match-token>`](https://drafts.csswg.org/css-syntax/#dash-match-token-diagram) type.
424
+ DashMatch ,
425
+
426
+ /// The `*=`
427
+ /// [`<substring-match-token>`](https://drafts.csswg.org/css-syntax/#substring-match-token-diagram)
428
+ /// type.
429
+ SubstringMatch ,
430
+
431
+ /// The `<(-token>` type.
432
+ OpenParen ,
433
+
434
+ /// The `#` `<delim-token>` type.
435
+ DelimHash ,
436
+
437
+ /// The `@` `<delim-token>` type.
438
+ DelimAt ,
439
+
440
+ /// The `.` or `+` `<delim-token>` type.
441
+ DelimDotOrPlus ,
442
+
443
+ /// The `-` `<delim-token>` type.
444
+ DelimMinus ,
445
+
446
+ /// The `?` `<delim-token>` type.
447
+ DelimQuestion ,
448
+
449
+ /// The `$`, `^`, or `~` `<delim-token>` type.
450
+ DelimAssorted ,
451
+
452
+ /// The `=` `<delim-token>` type.
453
+ DelimEquals ,
454
+
455
+ /// The `|` `<delim-token>` type.
456
+ DelimBar ,
457
+
458
+ /// The `/` `<delim-token>` type.
459
+ DelimSlash ,
460
+
461
+ /// The `*` `<delim-token>` type.
462
+ DelimAsterisk ,
463
+
464
+ /// The `%` `<delim-token>` type.
465
+ DelimPercent ,
466
+
467
+ /// A type indicating any other token.
468
+ Other ,
469
+ }
383
470
384
471
impl TokenSerializationType {
385
472
/// Return a value that represents the absence of a token, e.g. before the start of the input.
473
+ #[ deprecated(
474
+ since = "0.32.1" ,
475
+ note = "use TokenSerializationType::Nothing or TokenSerializationType::default() instead"
476
+ ) ]
386
477
pub fn nothing ( ) -> TokenSerializationType {
387
- TokenSerializationType ( TokenSerializationTypeVariants :: Nothing )
478
+ Default :: default ( )
388
479
}
389
480
390
- /// If this value is `TokenSerializationType::nothing() `, set it to the given value instead.
481
+ /// If this value is `TokenSerializationType::Nothing `, set it to the given value instead.
391
482
pub fn set_if_nothing ( & mut self , new_value : TokenSerializationType ) {
392
- if self . 0 == TokenSerializationTypeVariants :: Nothing {
393
- self . 0 = new_value. 0
483
+ if matches ! ( self , TokenSerializationType :: Nothing ) {
484
+ * self = new_value
394
485
}
395
486
}
396
487
@@ -404,10 +495,10 @@ impl TokenSerializationType {
404
495
/// See https://github.com/w3c/csswg-drafts/issues/4088 for the
405
496
/// `DelimPercent` bits.
406
497
pub fn needs_separator_when_before ( self , other : TokenSerializationType ) -> bool {
407
- use self :: TokenSerializationTypeVariants :: * ;
408
- match self . 0 {
498
+ use self :: TokenSerializationType :: * ;
499
+ match self {
409
500
Ident => matches ! (
410
- other. 0 ,
501
+ other,
411
502
Ident
412
503
| Function
413
504
| UrlOrBadUrl
@@ -419,15 +510,15 @@ impl TokenSerializationType {
419
510
| OpenParen
420
511
) ,
421
512
AtKeywordOrHash | Dimension => matches ! (
422
- other. 0 ,
513
+ other,
423
514
Ident | Function | UrlOrBadUrl | DelimMinus | Number | Percentage | Dimension | CDC
424
515
) ,
425
516
DelimHash | DelimMinus => matches ! (
426
- other. 0 ,
517
+ other,
427
518
Ident | Function | UrlOrBadUrl | DelimMinus | Number | Percentage | Dimension
428
519
) ,
429
520
Number => matches ! (
430
- other. 0 ,
521
+ other,
431
522
Ident
432
523
| Function
433
524
| UrlOrBadUrl
@@ -437,11 +528,11 @@ impl TokenSerializationType {
437
528
| DelimPercent
438
529
| Dimension
439
530
) ,
440
- DelimAt => matches ! ( other. 0 , Ident | Function | UrlOrBadUrl | DelimMinus ) ,
441
- DelimDotOrPlus => matches ! ( other. 0 , Number | Percentage | Dimension ) ,
442
- DelimAssorted | DelimAsterisk => matches ! ( other. 0 , DelimEquals ) ,
443
- DelimBar => matches ! ( other. 0 , DelimEquals | DelimBar | DashMatch ) ,
444
- DelimSlash => matches ! ( other. 0 , DelimAsterisk | SubstringMatch ) ,
531
+ DelimAt => matches ! ( other, Ident | Function | UrlOrBadUrl | DelimMinus ) ,
532
+ DelimDotOrPlus => matches ! ( other, Number | Percentage | Dimension ) ,
533
+ DelimAssorted | DelimAsterisk => matches ! ( other, DelimEquals ) ,
534
+ DelimBar => matches ! ( other, DelimEquals | DelimBar | DashMatch ) ,
535
+ DelimSlash => matches ! ( other, DelimAsterisk | SubstringMatch ) ,
445
536
Nothing | WhiteSpace | Percentage | UrlOrBadUrl | Function | CDC | OpenParen
446
537
| DashMatch | SubstringMatch | DelimQuestion | DelimEquals | DelimPercent | Other => {
447
538
false
@@ -450,43 +541,14 @@ impl TokenSerializationType {
450
541
}
451
542
}
452
543
453
- #[ derive( Copy , Clone , Eq , PartialEq , Debug ) ]
454
- enum TokenSerializationTypeVariants {
455
- Nothing ,
456
- WhiteSpace ,
457
- AtKeywordOrHash ,
458
- Number ,
459
- Dimension ,
460
- Percentage ,
461
- UrlOrBadUrl ,
462
- Function ,
463
- Ident ,
464
- CDC ,
465
- DashMatch ,
466
- SubstringMatch ,
467
- OpenParen , // '('
468
- DelimHash , // '#'
469
- DelimAt , // '@'
470
- DelimDotOrPlus , // '.', '+'
471
- DelimMinus , // '-'
472
- DelimQuestion , // '?'
473
- DelimAssorted , // '$', '^', '~'
474
- DelimEquals , // '='
475
- DelimBar , // '|'
476
- DelimSlash , // '/'
477
- DelimAsterisk , // '*'
478
- DelimPercent , // '%'
479
- Other , // anything else
480
- }
481
-
482
544
impl < ' a > Token < ' a > {
483
545
/// Categorize a token into a type that determines when `/**/` needs to be inserted
484
546
/// between two tokens when serialized next to each other without whitespace in between.
485
547
///
486
548
/// See the `TokenSerializationType::needs_separator_when_before` method.
487
549
pub fn serialization_type ( & self ) -> TokenSerializationType {
488
- use self :: TokenSerializationTypeVariants :: * ;
489
- TokenSerializationType ( match * self {
550
+ use self :: TokenSerializationType :: * ;
551
+ match self {
490
552
Token :: Ident ( _) => Ident ,
491
553
Token :: AtKeyword ( _) | Token :: Hash ( _) | Token :: IDHash ( _) => AtKeywordOrHash ,
492
554
Token :: UnquotedUrl ( _) | Token :: BadUrl ( _) => UrlOrBadUrl ,
@@ -526,6 +588,6 @@ impl<'a> Token<'a> {
526
588
| Token :: IncludeMatch
527
589
| Token :: PrefixMatch
528
590
| Token :: SuffixMatch => Other ,
529
- } )
591
+ }
530
592
}
531
593
}
0 commit comments