impl Hash for MyEnum { fn hash<H: Hasher>(&self, state: &mut H) { match self { MyEnum::Var1 => { state.write_u8(1); // use any distinct number as an enum variant identifier } MyEnum::Var2(v) => { state.write_u8(2); // use any distinct number as an enum variant identifier v.hash(state); // hash the actual value } MyEnum::Var3(v, _) => { state.write_u8(3); v.hash(state); } } } } impl PartialEq for MyEnum { fn eq(&self, other: &Self) -> bool { match (self, other) { (MyEnum::Var1, MyEnum::Var1) => true, (MyEnum::Var2(x), MyEnum::Var2(y)) => x == y, (MyEnum::Var3(x, _), MyEnum::Var3(y, _)) => x == y, _ => false, } } } impl Eq for MyEnum {}