mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Bump syn/quote in style_derive
This commit is contained in:
parent
cf6330b6c1
commit
9faa579c89
12 changed files with 302 additions and 338 deletions
|
@ -10,38 +10,40 @@ use to_css::CssVariantAttrs;
|
|||
|
||||
pub fn derive(input: DeriveInput) -> Tokens {
|
||||
let name = &input.ident;
|
||||
let s = synstructure::Structure::new(&input);
|
||||
|
||||
let mut match_body = quote! {};
|
||||
|
||||
let style = synstructure::BindStyle::Ref.into();
|
||||
synstructure::each_variant(&input, &style, |bindings, variant| {
|
||||
let match_body = s.variants().iter().fold(quote!(), |match_body, variant| {
|
||||
let bindings = variant.bindings();
|
||||
assert!(
|
||||
bindings.is_empty(),
|
||||
"Parse is only supported for single-variant enums for now"
|
||||
);
|
||||
|
||||
let variant_attrs = cg::parse_variant_attrs::<CssVariantAttrs>(variant);
|
||||
let variant_attrs = cg::parse_variant_attrs::<CssVariantAttrs>(&variant.ast());
|
||||
let identifier = cg::to_css_identifier(
|
||||
&variant_attrs.keyword.as_ref().unwrap_or(&variant.ident).as_ref(),
|
||||
&variant_attrs.keyword.unwrap_or(variant.ast().ident.as_ref().into()),
|
||||
);
|
||||
let ident = &variant.ident;
|
||||
let ident = &variant.ast().ident;
|
||||
|
||||
match_body = quote! {
|
||||
let mut body = quote! {
|
||||
#match_body
|
||||
#identifier => Ok(#name::#ident),
|
||||
};
|
||||
|
||||
|
||||
let aliases = match variant_attrs.aliases {
|
||||
Some(aliases) => aliases,
|
||||
None => return,
|
||||
None => return body,
|
||||
};
|
||||
|
||||
for alias in aliases.split(",") {
|
||||
match_body = quote! {
|
||||
#match_body
|
||||
body = quote! {
|
||||
#body
|
||||
#alias => Ok(#name::#ident),
|
||||
};
|
||||
}
|
||||
|
||||
body
|
||||
});
|
||||
|
||||
let parse_trait_impl = quote! {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue