discrimenum 0.1.0

Derive `Hash` and `PartialEq` on enums where only the discriminant matters.
Documentation
  • Coverage
  • 100%
    3 out of 3 items documented1 out of 3 items with examples
  • Size
  • Source code size: 24.1 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 278.12 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 4s Average build duration of successful builds.
  • all releases: 4s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • MrGVSV/discrimenum
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • MrGVSV

discrimenum

Derive Hash and PartialEq on enums where only the discriminant matters.

Why?

There are times where you have an enum where its variants might contain some data. However, you don't necessarily care what that data is when comparing or hashing, just that the discriminant matches. This can be done with a super simple impl—it's really only five lines of code. This crate simply does it for you as a convenience.

Usage

By default, discrimenum's derives take the name of the respective trait. Which means you only need to add the following line for things to work:

use discrimenum::{Hash, PartialEq};

Keep in mind that this will shadow the existing derives automatically imported in the prelude, preventing non-discrimenum usage for the current scope.

If this is undesired, either...

  • Qualify it: #[derive(discrimenum::Hash)]

  • Rename it: use discrimenum::Hash as DHash;

  • Scope it:

    // ...
    {
      use discrimenum::Hash;
      #[derive(Hash)]
      enum Foo {
        // ...
      }
    }
    // ...
    

Then apply it to your enum:

use discrimenum::{Hash, PartialEq};

#[derive(Hash, PartialEq, Debug)]
enum MyEnum {
    A(usize),
    B(usize)
}

assert_eq!(MyEnum::A(123), MyEnum::A(321));
assert_ne!(MyEnum::A(123), MyEnum::B(123));

Generics

This also applies to generic enums. In fact, since we only care about the discriminants, none of the generics need to be bound by Hash or PartialEq:

use discrimenum::{Hash, PartialEq};

#[derive(Hash, PartialEq)]
enum MyGenericEnum<T> {
    A(T),
    B(T)
}

// Notice we can put `T` instead of `T: Hash + PartialEq` 

Difference from similar crates?

None. Just felt like adding another 😉