style: Move some parsing-only attributes to use #[parse(..)] instead of #[css(..)].

I need to admit I'm ambivalent about this one :).

Bug: 1466609
Reviewed-by: xidorn
MozReview-Commit-ID: F1jlfnQKXwo
This commit is contained in:
Emilio Cobos Álvarez 2018-06-04 19:24:43 +02:00
parent 8821ad72f4
commit 2c0a19e517
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
8 changed files with 39 additions and 29 deletions

View file

@ -4,10 +4,17 @@
use cg;
use quote::Tokens;
use syn::DeriveInput;
use syn::{DeriveInput, Path};
use synstructure;
use to_css::CssVariantAttrs;
#[darling(attributes(parse), default)]
#[derive(Default, FromVariant)]
pub struct ParseVariantAttrs {
pub aliases: Option<String>,
pub condition: Option<Path>,
}
pub fn derive(input: DeriveInput) -> Tokens {
let name = &input.ident;
let s = synstructure::Structure::new(&input);
@ -20,18 +27,21 @@ pub fn derive(input: DeriveInput) -> Tokens {
"Parse is only supported for single-variant enums for now"
);
let variant_attrs = cg::parse_variant_attrs_from_ast::<CssVariantAttrs>(&variant.ast());
if variant_attrs.skip {
let css_variant_attrs =
cg::parse_variant_attrs_from_ast::<CssVariantAttrs>(&variant.ast());
let parse_attrs =
cg::parse_variant_attrs_from_ast::<ParseVariantAttrs>(&variant.ast());
if css_variant_attrs.skip {
return match_body;
}
let identifier = cg::to_css_identifier(
&variant_attrs.keyword.unwrap_or(variant.ast().ident.as_ref().into()),
&css_variant_attrs.keyword.unwrap_or(variant.ast().ident.as_ref().into()),
);
let ident = &variant.ast().ident;
saw_condition |= variant_attrs.parse_condition.is_some();
let condition = match variant_attrs.parse_condition {
saw_condition |= parse_attrs.condition.is_some();
let condition = match parse_attrs.condition {
Some(ref p) => quote! { if #p(context) },
None => quote! { },
};
@ -41,7 +51,7 @@ pub fn derive(input: DeriveInput) -> Tokens {
#identifier #condition => Ok(#name::#ident),
};
let aliases = match variant_attrs.aliases {
let aliases = match parse_attrs.aliases {
Some(aliases) => aliases,
None => return body,
};