fix enum discriminants not being included in the hash

This commit is contained in:
Intege-rs
2026-02-03 03:39:43 -05:00
parent f8e3e4ae8e
commit d99f1511eb
2 changed files with 30 additions and 1 deletions

View File

@@ -35,6 +35,11 @@ pub fn derive_hash2(input: TokenStream) -> TokenStream {
}
}
Data::Enum(data) => {
// Hash the discriminant first to ensure different variants hash differently
let discriminant_hash = quote! {
core::mem::discriminant(self).hash(state);
};
let variants = data.variants.iter().map(|variant| {
let variant_name = &variant.ident;
match &variant.fields {
@@ -69,8 +74,9 @@ pub fn derive_hash2(input: TokenStream) -> TokenStream {
}
}
});
quote! {
#discriminant_hash
match self {
#(#variants)*
}