Impl to_css for KeyframeSelector. r?heycam
draft
Impl to_css for KeyframeSelector. r?heycam
MozReview-Commit-ID: BtN4iUIW7Ot
--- a/servo/components/style/keyframes.rs
+++ b/servo/components/style/keyframes.rs
@@ -68,16 +68,29 @@ impl KeyframePercentage {
Ok(percentage)
}
}
/// A keyframes selector is a list of percentages or from/to symbols, which are
/// converted at parse time to percentages.
#[derive(Debug, PartialEq)]
pub struct KeyframeSelector(Vec<KeyframePercentage>);
+
+impl ToCss for KeyframeSelector {
+ fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
+ let mut iter = self.0.iter();
+ iter.next().unwrap().to_css(dest)?;
+ for percentage in iter {
+ write!(dest, ", ")?;
+ percentage.to_css(dest)?;
+ }
+ Ok(())
+ }
+}
+
impl KeyframeSelector {
/// Return the list of percentages this selector contains.
#[inline]
pub fn percentages(&self) -> &[KeyframePercentage] {
&self.0
}
/// A dummy public function so we can write a unit test for this.
@@ -103,30 +116,24 @@ pub struct Keyframe {
/// Note that `!important` rules in keyframes don't apply, but we keep this
/// `Arc` just for convenience.
pub block: Arc<Locked<PropertyDeclarationBlock>>,
}
impl ToCssWithGuard for Keyframe {
fn to_css<W>(&self, guard: &SharedRwLockReadGuard, dest: &mut W) -> fmt::Result
where W: fmt::Write {
- let mut iter = self.selector.percentages().iter();
- try!(iter.next().unwrap().to_css(dest));
- for percentage in iter {
- try!(write!(dest, ", "));
- try!(percentage.to_css(dest));
- }
+ self.selector.to_css(dest)?;
try!(dest.write_str(" { "));
try!(self.block.read_with(guard).to_css(dest));
try!(dest.write_str(" }"));
Ok(())
}
}
-
impl Keyframe {
/// Parse a CSS keyframe.
pub fn parse(css: &str, parent_stylesheet: &Stylesheet)
-> Result<Arc<Locked<Self>>, ()> {
let error_reporter = NullReporter;
let context = ParserContext::new(parent_stylesheet.origin,
&parent_stylesheet.url_data,
&error_reporter,