Expand description
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 object-safe (dyn MyTrait
).
error[E0038]: the trait `MyTrait` cannot be made into an object
--> src/main.rs:7:12
|
7 | let _: &dyn MyTrait;
| ^^^^^^^^^^^^ `MyTrait` cannot be made into an object
|
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
--> $SYSROOT/lib/rustlib/src/rust/library/core/src/hash/mod.rs
|
| fn hash<H: Hasher>(&self, state: &mut H);
| ^^^^ ...because method `hash` has generic type parameters
Macros§
- Implement the standard library
Hash
for a trait object that hasDynHash
as a supertrait.
Traits§
- This trait is implemented for any type that implements
std::hash::Hash
.