discriminanthashderive

Deriving DiscriminantHash implements Hash trait for the underlying enum. Here hash is only dependent on discriminant and isn’t effected by variant’s fields.

Example

```rust use discriminanthashderive::DiscriminantHash; use std::{ collections::hash_map::DefaultHasher, hash::{Hash, Hasher}, };

[derive(DiscriminantHash)]

enum Abc { Simple, HashNotImplemented(Xyz), Generic(T), }

[allow(unused)]

[derive(Hash)]

enum Pqr<'a> { Simple, Lifetime(&'a str), }

// Xyz doesn't impl Hash struct Xyz;

fn main() { asserteq!(myhash(Abc::Simple::), myhash(Abc::Simple::)); asserteq!( myhash(Abc::HashNotImplemented::(Xyz)), myhash(Abc::HashNotImplemented::(Xyz)) ); asserteq!( myhash(Abc::Generic::(4)), my_hash(Abc::Generic::(Xyz)) );

assert_ne!(
    my_hash(Abc::Simple::<i32>),
    my_hash(Abc::Generic::<Xyz>(Xyz))
);


// This may be same depending on how Pqr is defined
// assert_eq!(
//     my_hash(Abc::Simple::<i32>),
//     my_hash(Pqr::Simple)
// );

}

fn my_hash(obj: T) -> u64 where T: Hash, { let mut hasher = DefaultHasher::new(); obj.hash(&mut hasher); hasher.finish() } ```