Crate dyn_hash

Source
Expand description

githubcrates-iodocs-rs


This crate provides a DynHash trait that can be used in trait objects. Types that implement the standard library’s std::hash::Hash trait are automatically usable by a DynHash trait object.

§Example

use dyn_hash::DynHash;

trait MyTrait: DynHash {
    /* ... */
}

// Implement std::hash::Hash for dyn MyTrait
dyn_hash::hash_trait_object!(MyTrait);

// Now data structures containing Box<dyn MyTrait> can derive Hash:
#[derive(Hash)]
struct Container {
    trait_object: Box<dyn MyTrait>,
}

Without the dyn-hash crate, a trait trait MyTrait: std::hash::Hash {...} would not be dyn-compatible (dyn MyTrait).

error[E0038]: the trait `MyTrait` is not dyn compatible
 --> src/main.rs:7:12
  |
7 |     let _: &dyn MyTrait;
  |            ^^^^^^^^^^^^ `MyTrait` is not dyn compatible
  |
note: for a trait to be dyn compatible it needs to allow building a vtable
      for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
 --> $SYSROOT/lib/rustlib/src/rust/library/core/src/hash/mod.rs:199:8
  |
  |     fn hash<H: Hasher>(&self, state: &mut H);
  |        ^^^^ ...because method `hash` has generic type parameters

Macros§

hash_trait_object
Implement the standard library Hash for a trait object that has DynHash as a supertrait.

Traits§

DynHash
This trait is implemented for any type that implements std::hash::Hash.