From d2a1895752f111ad15a04999263cf0f635d569be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 15 Jun 2018 23:58:20 -0700 Subject: [PATCH] style: Add serialization code for MediaCondition. Bug: 1422225 Reviewed-by: xidorn MozReview-Commit-ID: AxQQottV1hG --- .../style/media_queries/media_condition.rs | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/components/style/media_queries/media_condition.rs b/components/style/media_queries/media_condition.rs index cb3bd73ee20..091d7049599 100644 --- a/components/style/media_queries/media_condition.rs +++ b/components/style/media_queries/media_condition.rs @@ -8,7 +8,8 @@ use cssparser::{Parser, Token}; use parser::ParserContext; -use style_traits::ParseError; +use std::fmt::{self, Write}; +use style_traits::{CssWriter, ParseError, ToCss}; use super::MediaFeatureExpression; @@ -33,6 +34,39 @@ pub enum MediaCondition { InParens(Box), } +impl ToCss for MediaCondition { + fn to_css(&self, dest: &mut CssWriter) -> fmt::Result + where + W: fmt::Write, + { + match *self { + // NOTE(emilio): MediaFeatureExpression already includes the + // parenthesis. + MediaCondition::Feature(ref f) => f.to_css(dest), + MediaCondition::Not(ref c) => { + dest.write_str("not ")?; + c.to_css(dest) + } + MediaCondition::InParens(ref c) => { + dest.write_char('(')?; + c.to_css(dest)?; + dest.write_char(')') + } + MediaCondition::Operation(ref list, op) => { + let mut iter = list.iter(); + iter.next().unwrap().to_css(dest)?; + for item in iter { + dest.write_char(' ')?; + op.to_css(dest)?; + dest.write_char(' ')?; + item.to_css(dest)?; + } + Ok(()) + } + } + } +} + impl MediaCondition { /// Parse a single media condition. pub fn parse<'i, 't>(