@@ -16,8 +16,10 @@ use std::collections::{HashMap, HashSet};
1616
1717/// A [media query list](https://drafts.csswg.org/mediaqueries/#mq-list).
1818#[ derive( Clone , Debug , PartialEq ) ]
19+ #[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
1920pub struct MediaList < ' i > {
2021 /// The list of media queries.
22+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
2123 pub media_queries : Vec < MediaQuery < ' i > > ,
2224}
2325
@@ -141,6 +143,11 @@ enum_property! {
141143
142144/// A [media type](https://drafts.csswg.org/mediaqueries/#media-types) within a media query.
143145#[ derive( Clone , Debug , PartialEq ) ]
146+ #[ cfg_attr(
147+ feature = "serde" ,
148+ derive( serde:: Serialize , serde:: Deserialize ) ,
149+ serde( tag = "type" , content = "value" , rename_all = "kebab-case" )
150+ ) ]
144151pub enum MediaType < ' i > {
145152 /// Matches all devices.
146153 All ,
@@ -150,6 +157,7 @@ pub enum MediaType<'i> {
150157 /// Matches all devices that aren’t matched by print.
151158 Screen ,
152159 /// An unknown media type.
160+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
153161 Custom ( CowArcStr < ' i > ) ,
154162}
155163
@@ -167,10 +175,12 @@ impl<'i> Parse<'i> for MediaType<'i> {
167175
168176/// A [media query](https://drafts.csswg.org/mediaqueries/#media).
169177#[ derive( Clone , Debug , PartialEq ) ]
178+ #[ cfg_attr( feature = "serde" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
170179pub struct MediaQuery < ' i > {
171180 /// The qualifier for this query.
172181 pub qualifier : Option < Qualifier > ,
173182 /// The media type for this query, that can be known, unknown, or "all".
183+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
174184 pub media_type : MediaType < ' i > ,
175185 /// The condition that this media query contains. This cannot have `or`
176186 /// in the first level.
@@ -354,8 +364,14 @@ enum_property! {
354364
355365/// Represents a media condition.
356366#[ derive( Clone , Debug , PartialEq ) ]
367+ #[ cfg_attr(
368+ feature = "serde" ,
369+ derive( serde:: Serialize , serde:: Deserialize ) ,
370+ serde( tag = "type" , content = "value" , rename_all = "kebab-case" )
371+ ) ]
357372pub enum MediaCondition < ' i > {
358373 /// A media feature, implicitly parenthesized.
374+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
359375 Feature ( MediaFeature < ' i > ) ,
360376 /// A negation of a condition.
361377 Not ( Box < MediaCondition < ' i > > ) ,
@@ -460,6 +476,11 @@ impl<'i> ToCss for MediaCondition<'i> {
460476
461477/// A [comparator](https://drafts.csswg.org/mediaqueries/#typedef-mf-comparison) within a media query.
462478#[ derive( Clone , Copy , Debug , Eq , PartialEq ) ]
479+ #[ cfg_attr(
480+ feature = "serde" ,
481+ derive( serde:: Serialize , serde:: Deserialize ) ,
482+ serde( tag = "type" , content = "value" , rename_all = "kebab-case" )
483+ ) ]
463484pub enum MediaFeatureComparison {
464485 /// `=`
465486 Equal ,
@@ -511,10 +532,16 @@ impl MediaFeatureComparison {
511532
512533/// A [media feature](https://drafts.csswg.org/mediaqueries/#typedef-media-feature)
513534#[ derive( Clone , Debug , PartialEq ) ]
535+ #[ cfg_attr(
536+ feature = "serde" ,
537+ derive( serde:: Serialize , serde:: Deserialize ) ,
538+ serde( tag = "type" , content = "value" , rename_all = "kebab-case" )
539+ ) ]
514540pub enum MediaFeature < ' i > {
515541 /// A plain media feature, e.g. `(min-width: 240px)`.
516542 Plain {
517543 /// The name of the feature.
544+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
518545 name : CowArcStr < ' i > ,
519546 /// The feature value.
520547 value : MediaFeatureValue < ' i > ,
@@ -707,6 +734,11 @@ where
707734///
708735/// See [MediaFeature](MediaFeature).
709736#[ derive( Clone , Debug , PartialEq ) ]
737+ #[ cfg_attr(
738+ feature = "serde" ,
739+ derive( serde:: Serialize , serde:: Deserialize ) ,
740+ serde( tag = "type" , content = "value" , rename_all = "kebab-case" )
741+ ) ]
710742pub enum MediaFeatureValue < ' i > {
711743 /// A length value.
712744 Length ( Length ) ,
@@ -717,6 +749,7 @@ pub enum MediaFeatureValue<'i> {
717749 /// A ratio.
718750 Ratio ( Ratio ) ,
719751 /// An indentifier.
752+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
720753 Ident ( CowArcStr < ' i > ) ,
721754}
722755
0 commit comments