| Crates.io | dyn-hash |
| lib.rs | dyn-hash |
| version | 0.2.2 |
| created_at | 2023-11-03 02:00:01.94105+00 |
| updated_at | 2025-03-03 23:27:33.253192+00 |
| description | Hash trait that is dyn-compatible |
| homepage | |
| repository | https://github.com/dtolnay/dyn-hash |
| max_upload_size | |
| id | 1023785 |
| size | 33,305 |
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.
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