From 76df67fc7bb33686bfa769f9b194b9d585ed3cee Mon Sep 17 00:00:00 2001 From: Ravi Shankar Date: Thu, 13 Apr 2017 10:59:55 +0530 Subject: [PATCH] Add add_impls_for_keyword_enum macro for implementing necessary traits --- components/style/values/mod.rs | 21 +++++++++++++++++++ .../style/values/specified/basic_shape.rs | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/components/style/values/mod.rs b/components/style/values/mod.rs index f3dd7089830..256d07dd733 100644 --- a/components/style/values/mod.rs +++ b/components/style/values/mod.rs @@ -60,6 +60,27 @@ macro_rules! no_viewport_percentage { }; } +/// A macro for implementing `ComputedValueAsSpecified`, `Parse` +/// and `HasViewportPercentage` traits for the enums defined +/// using `define_css_keyword_enum` macro. +/// +/// NOTE: We should either move `Parse` trait to `style_traits` +/// or `define_css_keyword_enum` macro to this crate, but that +/// may involve significant cleanup in both the crates. +macro_rules! add_impls_for_keyword_enum { + ($name:ident) => { + impl Parse for $name { + #[inline] + fn parse(_context: &ParserContext, input: &mut ::cssparser::Parser) -> Result { + $name::parse(input) + } + } + + impl ComputedValueAsSpecified for $name {} + no_viewport_percentage!($name); + }; +} + pub mod computed; pub mod specified; diff --git a/components/style/values/specified/basic_shape.rs b/components/style/values/specified/basic_shape.rs index a4f302b0df1..311049043e0 100644 --- a/components/style/values/specified/basic_shape.rs +++ b/components/style/values/specified/basic_shape.rs @@ -14,6 +14,7 @@ use properties::shorthands::{parse_four_sides, serialize_four_sides}; use std::ascii::AsciiExt; use std::fmt; use style_traits::ToCss; +use values::HasViewportPercentage; use values::computed::{ComputedValueAsSpecified, Context, ToComputedValue}; use values::computed::basic_shape as computed_basic_shape; use values::specified::{BorderRadiusSize, LengthOrPercentage, Percentage}; @@ -861,4 +862,4 @@ define_css_keyword_enum!(ShapeBox: "content-box" => ContentBox ); -impl ComputedValueAsSpecified for ShapeBox {} +add_impls_for_keyword_enum!(ShapeBox);