Move PartialEq related derive logic to derive module

This commit is contained in:
David Tolnay 2020-11-27 14:11:41 -08:00
parent 982158b9e4
commit b3d7bb12fb
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
2 changed files with 9 additions and 7 deletions

View File

@ -17,7 +17,7 @@ pub fn expand_struct(strct: &Struct) -> TokenStream {
expanded
}
pub fn expand_enum(enm: &Enum) -> TokenStream {
pub fn expand_enum(enm: &Enum, actual_derives: &mut Option<TokenStream>) -> TokenStream {
let mut expanded = TokenStream::new();
let mut has_copy = false;
let mut has_clone = false;
@ -45,6 +45,12 @@ pub fn expand_enum(enm: &Enum) -> TokenStream {
expanded.extend(enum_clone(enm, span));
}
*actual_derives = Some(quote! {
// Required to be derived in order for the enum's "variants" to be
// usable in patterns.
#[derive(::std::cmp::PartialEq, ::std::cmp::Eq)]
});
expanded
}

View File

@ -164,12 +164,8 @@ fn expand_enum(enm: &Enum) -> TokenStream {
pub const #variant_ident: Self = #ident { repr: #discriminant };
})
});
let derives = quote! {
// Required to be derived in order for the enum's "variants" to be
// usable in patterns.
#[derive(::std::cmp::PartialEq, ::std::cmp::Eq)]
};
let derived_traits = derive::expand_enum(enm);
let mut derives = None;
let derived_traits = derive::expand_enum(enm, &mut derives);
quote! {
#doc