aboutsummaryrefslogtreecommitdiffstats
path: root/components/style_derive/to_css.rs
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2017-11-11 14:27:31 +0100
committerEmilio Cobos Álvarez <emilio@crisal.io>2017-11-12 05:24:08 +0100
commit06f8f0384b8298e50b261854aa45f79cfe377e3b (patch)
treebe1e50687137f8f7e4417599de4350c1df7a17d5 /components/style_derive/to_css.rs
parent33fa728d6e5392993c83f630acc1d6e442104dec (diff)
downloadservo-06f8f0384b8298e50b261854aa45f79cfe377e3b.tar.gz
servo-06f8f0384b8298e50b261854aa45f79cfe377e3b.zip
style: add css(function, iterable), and derive ToCss for VariantAlternates.
Diffstat (limited to 'components/style_derive/to_css.rs')
-rw-r--r--components/style_derive/to_css.rs21
1 files changed, 18 insertions, 3 deletions
diff --git a/components/style_derive/to_css.rs b/components/style_derive/to_css.rs
index 6ae438ccbd2..70fb01692a7 100644
--- a/components/style_derive/to_css.rs
+++ b/components/style_derive/to_css.rs
@@ -21,13 +21,27 @@ pub fn derive(input: DeriveInput) -> Tokens {
let separator = if variant_attrs.comma { ", " } else { " " };
let mut expr = if !bindings.is_empty() {
let mut expr = quote! {};
- for binding in bindings {
- where_clause.add_trait_bound(&binding.field.ty);
+
+ if variant_attrs.function && variant_attrs.iterable {
+ assert_eq!(bindings.len(), 1);
+ let binding = &bindings[0];
expr = quote! {
#expr
- writer.item(#binding)?;
+
+ for item in #binding.iter() {
+ writer.item(item)?;
+ }
};
+ } else {
+ for binding in bindings {
+ where_clause.add_trait_bound(&binding.field.ty);
+ expr = quote! {
+ #expr
+ writer.item(#binding)?;
+ };
+ }
}
+
quote! {{
let mut writer = ::style_traits::values::SequenceWriter::new(&mut *dest, #separator);
#expr
@@ -89,6 +103,7 @@ struct CssInputAttrs {
#[derive(Default, FromVariant)]
struct CssVariantAttrs {
function: bool,
+ iterable: bool,
comma: bool,
}