diff options
author | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-11-11 14:27:31 +0100 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-11-12 05:24:08 +0100 |
commit | 06f8f0384b8298e50b261854aa45f79cfe377e3b (patch) | |
tree | be1e50687137f8f7e4417599de4350c1df7a17d5 /components/style_derive/to_css.rs | |
parent | 33fa728d6e5392993c83f630acc1d6e442104dec (diff) | |
download | servo-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.rs | 21 |
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, } |