5 releases

0.2.1 Feb 1, 2025
0.2.0 Mar 23, 2024
0.1.2 Nov 3, 2023
0.1.1 Nov 3, 2023
0.1.0 Nov 3, 2023

#484 in Rust patterns

Download history 6793/week @ 2024-10-25 6975/week @ 2024-11-01 6086/week @ 2024-11-08 6345/week @ 2024-11-15 7998/week @ 2024-11-22 6757/week @ 2024-11-29 7886/week @ 2024-12-06 6403/week @ 2024-12-13 3578/week @ 2024-12-20 3563/week @ 2024-12-27 7246/week @ 2025-01-03 9311/week @ 2025-01-10 10763/week @ 2025-01-17 10545/week @ 2025-01-24 12271/week @ 2025-01-31 8948/week @ 2025-02-07

44,214 downloads per month
Used in 53 crates (7 directly)

MIT/Apache

12KB
84 lines

Hash trait that is dyn-compatible

github crates.io docs.rs build status

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

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

No runtime deps