1#![doc(html_root_url = "https://docs.rs/dyn-hash/1.0.0")]
51#![no_std]
52
53#[cfg(doc)]
54extern crate core as std;
55
56mod macros;
57
58use core::hash::{Hash, Hasher};
59
60pub trait DynHash: sealed::Sealed {
62 fn dyn_hash(&self, state: &mut dyn Hasher);
63}
64
65impl<T: Hash + ?Sized> DynHash for T {
66 fn dyn_hash(&self, mut state: &mut dyn Hasher) {
67 Hash::hash(self, &mut state);
68 }
69}
70
71impl<'hash> crate::__private::Hash for dyn DynHash + 'hash where {
fn hash<H: crate::__private::Hasher>(&self, state: &mut H) {
crate::DynHash::dyn_hash(self, state);
}
}
impl<'hash> crate::__private::Hash for
dyn DynHash + crate::__private::Send + 'hash where {
fn hash<H: crate::__private::Hasher>(&self, state: &mut H) {
crate::DynHash::dyn_hash(self, state);
}
}
impl<'hash> crate::__private::Hash for
dyn DynHash + crate::__private::Sync + 'hash where {
fn hash<H: crate::__private::Hasher>(&self, state: &mut H) {
crate::DynHash::dyn_hash(self, state);
}
}
impl<'hash> crate::__private::Hash for
dyn DynHash + crate::__private::Send + crate::__private::Sync + 'hash
where {
fn hash<H: crate::__private::Hasher>(&self, state: &mut H) {
crate::DynHash::dyn_hash(self, state);
}
}hash_trait_object!(DynHash);
72
73#[doc(hidden)]
75pub mod __private {
76 pub use core::hash::{Hash, Hasher};
77 pub use core::marker::{Send, Sync};
78}
79
80mod sealed {
81 use core::hash::Hash;
82
83 pub trait Sealed {}
84 impl<T: Hash + ?Sized> Sealed for T {}
85}