diff options
Diffstat (limited to 'components/style_derive/to_animated_zero.rs')
-rw-r--r-- | components/style_derive/to_animated_zero.rs | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/components/style_derive/to_animated_zero.rs b/components/style_derive/to_animated_zero.rs index be1210faa7a..674a0201fcc 100644 --- a/components/style_derive/to_animated_zero.rs +++ b/components/style_derive/to_animated_zero.rs @@ -6,31 +6,30 @@ use animate::{AnimationVariantAttrs, AnimationFieldAttrs}; use cg; use quote; use syn; -use synstructure::{self, BindStyle}; +use synstructure; pub fn derive(input: syn::DeriveInput) -> quote::Tokens { let name = &input.ident; - let trait_path = &["values", "animated", "ToAnimatedZero"]; + let trait_path = parse_quote!(values::animated::ToAnimatedZero); let (impl_generics, ty_generics, mut where_clause) = - cg::trait_parts(&input, trait_path); + cg::trait_parts(&input, &trait_path); - let bind_opts = BindStyle::Ref.into(); - let to_body = synstructure::each_variant(&input, &bind_opts, |bindings, variant| { - let attrs = cg::parse_variant_attrs::<AnimationVariantAttrs>(variant); + let s = synstructure::Structure::new(&input); + let to_body = s.each_variant(|variant| { + let attrs = cg::parse_variant_attrs::<AnimationVariantAttrs>(&variant.ast()); if attrs.error { return Some(quote! { Err(()) }); } - let name = cg::variant_ctor(&input, variant); - let (mapped, mapped_bindings) = cg::value(&name, variant, "mapped"); - let bindings_pairs = bindings.into_iter().zip(mapped_bindings); + let (mapped, mapped_bindings) = cg::value(variant, "mapped"); + let bindings_pairs = variant.bindings().into_iter().zip(mapped_bindings); let mut computations = quote!(); computations.append_all(bindings_pairs.map(|(binding, mapped_binding)| { - let field_attrs = cg::parse_field_attrs::<AnimationFieldAttrs>(&binding.field); + let field_attrs = cg::parse_field_attrs::<AnimationFieldAttrs>(&binding.ast()); if field_attrs.constant { - if cg::is_parameterized(&binding.field.ty, where_clause.params, None) { - where_clause.inner.predicates.push(cg::where_predicate( - binding.field.ty.clone(), - &["std", "clone", "Clone"], + if cg::is_parameterized(&binding.ast().ty, &where_clause.params, None) { + where_clause.add_predicate(cg::where_predicate( + binding.ast().ty.clone(), + &parse_quote!(std::clone::Clone), None, )); } @@ -38,14 +37,14 @@ pub fn derive(input: syn::DeriveInput) -> quote::Tokens { let #mapped_binding = ::std::clone::Clone::clone(#binding); } } else { - where_clause.add_trait_bound(&binding.field.ty); + where_clause.add_trait_bound(&binding.ast().ty); quote! { let #mapped_binding = ::values::animated::ToAnimatedZero::to_animated_zero(#binding)?; } } })); - computations.append(quote! { Ok(#mapped) }); + computations.append_all(quote! { Ok(#mapped) }); Some(computations) }); |