@@ -16,8 +16,6 @@ use cssparser::color::{
16
16
PredefinedColorSpace , OPAQUE ,
17
17
} ;
18
18
use cssparser:: { match_ignore_ascii_case, CowRcStr , ParseError , Parser , ToCss , Token } ;
19
- #[ cfg( feature = "serde" ) ]
20
- use serde:: { Deserialize , Deserializer , Serialize , Serializer } ;
21
19
use std:: f32:: consts:: PI ;
22
20
use std:: fmt;
23
21
use std:: str:: FromStr ;
55
53
let token = input. next ( ) ?;
56
54
match * token {
57
55
Token :: Hash ( ref value) | Token :: IDHash ( ref value) => {
58
- parse_hash_color ( value. as_bytes ( ) ) . map ( |( r, g, b, a) | {
59
- P :: Output :: from_rgba ( r, g, b, a)
60
- } )
61
- } ,
56
+ parse_hash_color ( value. as_bytes ( ) ) . map ( |( r, g, b, a) | P :: Output :: from_rgba ( r, g, b, a) )
57
+ }
62
58
Token :: Ident ( ref value) => parse_color_keyword ( value) ,
63
59
Token :: Function ( ref name) => {
64
60
let name = name. clone ( ) ;
@@ -506,6 +502,7 @@ fn normalize_hue(hue: f32) -> f32 {
506
502
}
507
503
508
504
/// A color with red, green, blue, and alpha components, in a byte each.
505
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
509
506
#[ derive( Clone , Copy , PartialEq , Debug ) ]
510
507
pub struct RgbaLegacy {
511
508
/// The red component.
@@ -544,27 +541,6 @@ impl RgbaLegacy {
544
541
}
545
542
}
546
543
547
- #[ cfg( feature = "serde" ) ]
548
- impl Serialize for RgbaLegacy {
549
- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
550
- where
551
- S : Serializer ,
552
- {
553
- ( self . red , self . green , self . blue , self . alpha ) . serialize ( serializer)
554
- }
555
- }
556
-
557
- #[ cfg( feature = "serde" ) ]
558
- impl < ' de > Deserialize < ' de > for RgbaLegacy {
559
- fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
560
- where
561
- D : Deserializer < ' de > ,
562
- {
563
- let ( r, g, b, a) = Deserialize :: deserialize ( deserializer) ?;
564
- Ok ( RgbaLegacy :: new ( r, g, b, a) )
565
- }
566
- }
567
-
568
544
impl ToCss for RgbaLegacy {
569
545
fn to_css < W > ( & self , dest : & mut W ) -> fmt:: Result
570
546
where
@@ -588,6 +564,7 @@ impl ToCss for RgbaLegacy {
588
564
589
565
/// Color specified by hue, saturation and lightness components.
590
566
#[ derive( Clone , Copy , PartialEq , Debug ) ]
567
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
591
568
pub struct Hsl {
592
569
/// The hue component.
593
570
pub hue : Option < f32 > ,
@@ -632,29 +609,9 @@ impl ToCss for Hsl {
632
609
}
633
610
}
634
611
635
- #[ cfg( feature = "serde" ) ]
636
- impl Serialize for Hsl {
637
- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
638
- where
639
- S : Serializer ,
640
- {
641
- ( self . hue , self . saturation , self . lightness , self . alpha ) . serialize ( serializer)
642
- }
643
- }
644
-
645
- #[ cfg( feature = "serde" ) ]
646
- impl < ' de > Deserialize < ' de > for Hsl {
647
- fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
648
- where
649
- D : Deserializer < ' de > ,
650
- {
651
- let ( lightness, a, b, alpha) = Deserialize :: deserialize ( deserializer) ?;
652
- Ok ( Self :: new ( lightness, a, b, alpha) )
653
- }
654
- }
655
-
656
612
/// Color specified by hue, whiteness and blackness components.
657
613
#[ derive( Clone , Copy , PartialEq , Debug ) ]
614
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
658
615
pub struct Hwb {
659
616
/// The hue component.
660
617
pub hue : Option < f32 > ,
@@ -699,32 +656,12 @@ impl ToCss for Hwb {
699
656
}
700
657
}
701
658
702
- #[ cfg( feature = "serde" ) ]
703
- impl Serialize for Hwb {
704
- fn serialize < S > ( & self , serializer : S ) -> Result < S :: Ok , S :: Error >
705
- where
706
- S : Serializer ,
707
- {
708
- ( self . hue , self . whiteness , self . blackness , self . alpha ) . serialize ( serializer)
709
- }
710
- }
711
-
712
- #[ cfg( feature = "serde" ) ]
713
- impl < ' de > Deserialize < ' de > for Hwb {
714
- fn deserialize < D > ( deserializer : D ) -> Result < Self , D :: Error >
715
- where
716
- D : Deserializer < ' de > ,
717
- {
718
- let ( lightness, whiteness, blackness, alpha) = Deserialize :: deserialize ( deserializer) ?;
719
- Ok ( Self :: new ( lightness, whiteness, blackness, alpha) )
720
- }
721
- }
722
-
723
659
// NOTE: LAB and OKLAB is not declared inside the [impl_lab_like] macro,
724
660
// because it causes cbindgen to ignore them.
725
661
726
662
/// Color specified by lightness, a- and b-axis components.
727
663
#[ derive( Clone , Copy , PartialEq , Debug ) ]
664
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
728
665
pub struct Lab {
729
666
/// The lightness component.
730
667
pub lightness : Option < f32 > ,
@@ -738,6 +675,7 @@ pub struct Lab {
738
675
739
676
/// Color specified by lightness, a- and b-axis components.
740
677
#[ derive( Clone , Copy , PartialEq , Debug ) ]
678
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
741
679
pub struct Oklab {
742
680
/// The lightness component.
743
681
pub lightness : Option < f32 > ,
@@ -768,27 +706,6 @@ macro_rules! impl_lab_like {
768
706
}
769
707
}
770
708
771
- #[ cfg( feature = "serde" ) ]
772
- impl Serialize for $cls {
773
- fn serialize<S >( & self , serializer: S ) -> Result <S :: Ok , S :: Error >
774
- where
775
- S : Serializer ,
776
- {
777
- ( self . lightness, self . a, self . b, self . alpha) . serialize( serializer)
778
- }
779
- }
780
-
781
- #[ cfg( feature = "serde" ) ]
782
- impl <' de> Deserialize <' de> for $cls {
783
- fn deserialize<D >( deserializer: D ) -> Result <Self , D :: Error >
784
- where
785
- D : Deserializer <' de>,
786
- {
787
- let ( lightness, a, b, alpha) = Deserialize :: deserialize( deserializer) ?;
788
- Ok ( Self :: new( lightness, a, b, alpha) )
789
- }
790
- }
791
-
792
709
impl ToCss for $cls {
793
710
fn to_css<W >( & self , dest: & mut W ) -> fmt:: Result
794
711
where
@@ -816,6 +733,7 @@ impl_lab_like!(Oklab, "oklab");
816
733
817
734
/// Color specified by lightness, chroma and hue components.
818
735
#[ derive( Clone , Copy , PartialEq , Debug ) ]
736
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
819
737
pub struct Lch {
820
738
/// The lightness component.
821
739
pub lightness : Option < f32 > ,
@@ -829,6 +747,7 @@ pub struct Lch {
829
747
830
748
/// Color specified by lightness, chroma and hue components.
831
749
#[ derive( Clone , Copy , PartialEq , Debug ) ]
750
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
832
751
pub struct Oklch {
833
752
/// The lightness component.
834
753
pub lightness : Option < f32 > ,
@@ -859,27 +778,6 @@ macro_rules! impl_lch_like {
859
778
}
860
779
}
861
780
862
- #[ cfg( feature = "serde" ) ]
863
- impl Serialize for $cls {
864
- fn serialize<S >( & self , serializer: S ) -> Result <S :: Ok , S :: Error >
865
- where
866
- S : Serializer ,
867
- {
868
- ( self . lightness, self . chroma, self . hue, self . alpha) . serialize( serializer)
869
- }
870
- }
871
-
872
- #[ cfg( feature = "serde" ) ]
873
- impl <' de> Deserialize <' de> for $cls {
874
- fn deserialize<D >( deserializer: D ) -> Result <Self , D :: Error >
875
- where
876
- D : Deserializer <' de>,
877
- {
878
- let ( lightness, chroma, hue, alpha) = Deserialize :: deserialize( deserializer) ?;
879
- Ok ( Self :: new( lightness, chroma, hue, alpha) )
880
- }
881
- }
882
-
883
781
impl ToCss for $cls {
884
782
fn to_css<W >( & self , dest: & mut W ) -> fmt:: Result
885
783
where
@@ -905,6 +803,7 @@ impl_lch_like!(Oklch, "oklch");
905
803
/// A color specified by the color() function.
906
804
/// <https://drafts.csswg.org/css-color-4/#color-function>
907
805
#[ derive( Clone , Copy , PartialEq , Debug ) ]
806
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
908
807
pub struct ColorFunction {
909
808
/// The color space for this color.
910
809
pub color_space : PredefinedColorSpace ,
@@ -966,6 +865,8 @@ impl ToCss for ColorFunction {
966
865
///
967
866
/// <https://drafts.csswg.org/css-color-4/#color-type>
968
867
#[ derive( Clone , Copy , PartialEq , Debug ) ]
868
+ #[ cfg_attr( feature = "serde" , derive( serde:: Deserialize , serde:: Serialize ) ) ]
869
+ #[ cfg_attr( feature = "serde" , serde( tag = "type" ) ) ]
969
870
pub enum Color {
970
871
/// The 'currentcolor' keyword.
971
872
CurrentColor ,
0 commit comments