Trait ethcore_util::standard::Hash 1.0.0
[−]
[src]
pub trait Hash { fn hash<H>(&self, state: &mut H) where H: Hasher; fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher { ... } }
A hashable type.
The H
type parameter is an abstract hash state that is used by the Hash
to compute the hash.
If you are also implementing Eq
, there is an additional property that
is important:
k1 == k2 -> hash(k1) == hash(k2)
In other words, if two keys are equal, their hashes should also be equal.
HashMap
and HashSet
both rely on this behavior.
Derivable
This trait can be used with #[derive]
if all fields implement Hash
.
When derive
d, the resulting hash will be the combination of the values
from calling .hash()
on each field.
How can I implement Hash
?
If you need more control over how a value is hashed, you need to implement
the Hash
trait:
use std::hash::{Hash, Hasher}; struct Person { id: u32, name: String, phone: u64, } impl Hash for Person { fn hash<H: Hasher>(&self, state: &mut H) { self.id.hash(state); self.phone.hash(state); } }
Required Methods
fn hash<H>(&self, state: &mut H) where H: Hasher
Feeds this value into the state given, updating the hasher as necessary.
Provided Methods
fn hash_slice<H>(data: &[Self], state: &mut H) where H: Hasher
1.3.0
Feeds a slice of this type into the state provided.
Implementors
impl Hash for U512
impl Hash for U256
impl Hash for U128
impl<K, V> Hash for BTreeMap<K, V> where K: Hash, V: Hash
impl<'a, B> Hash for Cow<'a, B> where B: Hash + ToOwned + ?Sized
impl<T> Hash for LinkedList<T> where T: Hash
impl Hash for String
impl<T> Hash for Vec<T> where T: Hash
impl<A> Hash for VecDeque<A> where A: Hash
impl<T> Hash for BTreeSet<T> where T: Hash
impl<E> Hash for EnumSet<E> where E: Hash
impl<T> Hash for Bound<T> where T: Hash
impl Hash for PublicKey
impl Hash for PublicKey
impl Hash for H32
impl Hash for H64
impl Hash for H128
impl Hash for H160
impl Hash for H256
impl Hash for H264
impl Hash for H512
impl Hash for H520
impl Hash for H1024
impl Hash for H2048
impl<T> Hash for ElasticArray2<T> where T: Hash
impl<T> Hash for ElasticArray4<T> where T: Hash
impl<T> Hash for ElasticArray8<T> where T: Hash
impl<T> Hash for ElasticArray16<T> where T: Hash
impl<T> Hash for ElasticArray32<T> where T: Hash
impl<T> Hash for ElasticArray36<T> where T: Hash
impl<T> Hash for ElasticArray64<T> where T: Hash
impl<T> Hash for ElasticArray128<T> where T: Hash
impl<T> Hash for ElasticArray256<T> where T: Hash
impl<T> Hash for ElasticArray512<T> where T: Hash
impl<T> Hash for ElasticArray1024<T> where T: Hash
impl<T> Hash for ElasticArray2048<T> where T: Hash
impl Hash for Match
impl<T> Hash for Discriminant<T>
impl Hash for bool
impl Hash for char
impl Hash for str
impl<T> Hash for [T] where T: Hash
impl<'a, T> Hash for &'a T where T: Hash + ?Sized
impl<'a, T> Hash for &'a mut T where T: Hash + ?Sized
impl<T> Hash for *const T
impl<T> Hash for *mut T
impl<T> Hash for Wrapping<T> where T: Hash
impl<T> Hash for NonZero<T> where T: Zeroable + Hash
impl<Ret> Hash for fn() -> Ret
impl<Ret> Hash for extern fn() -> Ret
impl<Ret> Hash for unsafe fn() -> Ret
impl<Ret> Hash for unsafe extern fn() -> Ret
impl<Ret, A> Hash for fn(A) -> Ret
impl<Ret, A> Hash for extern fn(A) -> Ret
impl<Ret, A> Hash for extern fn(A, ...) -> Ret
impl<Ret, A> Hash for unsafe fn(A) -> Ret
impl<Ret, A> Hash for unsafe extern fn(A) -> Ret
impl<Ret, A> Hash for unsafe extern fn(A, ...) -> Ret
impl<Ret, A, B> Hash for fn(A, B) -> Ret
impl<Ret, A, B> Hash for extern fn(A, B) -> Ret
impl<Ret, A, B> Hash for extern fn(A, B, ...) -> Ret
impl<Ret, A, B> Hash for unsafe fn(A, B) -> Ret
impl<Ret, A, B> Hash for unsafe extern fn(A, B) -> Ret
impl<Ret, A, B> Hash for unsafe extern fn(A, B, ...) -> Ret
impl<Ret, A, B, C> Hash for fn(A, B, C) -> Ret
impl<Ret, A, B, C> Hash for extern fn(A, B, C) -> Ret
impl<Ret, A, B, C> Hash for extern fn(A, B, C, ...) -> Ret
impl<Ret, A, B, C> Hash for unsafe fn(A, B, C) -> Ret
impl<Ret, A, B, C> Hash for unsafe extern fn(A, B, C) -> Ret
impl<Ret, A, B, C> Hash for unsafe extern fn(A, B, C, ...) -> Ret
impl<Ret, A, B, C, D> Hash for fn(A, B, C, D) -> Ret
impl<Ret, A, B, C, D> Hash for extern fn(A, B, C, D) -> Ret
impl<Ret, A, B, C, D> Hash for extern fn(A, B, C, D, ...) -> Ret
impl<Ret, A, B, C, D> Hash for unsafe fn(A, B, C, D) -> Ret
impl<Ret, A, B, C, D> Hash for unsafe extern fn(A, B, C, D) -> Ret
impl<Ret, A, B, C, D> Hash for unsafe extern fn(A, B, C, D, ...) -> Ret
impl<Ret, A, B, C, D, E> Hash for fn(A, B, C, D, E) -> Ret
impl<Ret, A, B, C, D, E> Hash for extern fn(A, B, C, D, E) -> Ret
impl<Ret, A, B, C, D, E> Hash for extern fn(A, B, C, D, E, ...) -> Ret
impl<Ret, A, B, C, D, E> Hash for unsafe fn(A, B, C, D, E) -> Ret
impl<Ret, A, B, C, D, E> Hash for unsafe extern fn(A, B, C, D, E) -> Ret
impl<Ret, A, B, C, D, E> Hash for unsafe extern fn(A, B, C, D, E, ...) -> Ret
impl<Ret, A, B, C, D, E, F> Hash for fn(A, B, C, D, E, F) -> Ret
impl<Ret, A, B, C, D, E, F> Hash for extern fn(A, B, C, D, E, F) -> Ret
impl<Ret, A, B, C, D, E, F> Hash for extern fn(A, B, C, D, E, F, ...) -> Ret
impl<Ret, A, B, C, D, E, F> Hash for unsafe fn(A, B, C, D, E, F) -> Ret
impl<Ret, A, B, C, D, E, F> Hash for unsafe extern fn(A, B, C, D, E, F) -> Ret
impl<Ret, A, B, C, D, E, F> Hash for unsafe extern fn(A, B, C, D, E, F, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G> Hash for fn(A, B, C, D, E, F, G) -> Ret
impl<Ret, A, B, C, D, E, F, G> Hash for extern fn(A, B, C, D, E, F, G) -> Ret
impl<Ret, A, B, C, D, E, F, G> Hash for extern fn(A, B, C, D, E, F, G, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G> Hash for unsafe fn(A, B, C, D, E, F, G) -> Ret
impl<Ret, A, B, C, D, E, F, G> Hash for unsafe extern fn(A, B, C, D, E, F, G) -> Ret
impl<Ret, A, B, C, D, E, F, G> Hash for unsafe extern fn(A, B, C, D, E, F, G, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H> Hash for fn(A, B, C, D, E, F, G, H) -> Ret
impl<Ret, A, B, C, D, E, F, G, H> Hash for extern fn(A, B, C, D, E, F, G, H) -> Ret
impl<Ret, A, B, C, D, E, F, G, H> Hash for extern fn(A, B, C, D, E, F, G, H, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H> Hash for unsafe fn(A, B, C, D, E, F, G, H) -> Ret
impl<Ret, A, B, C, D, E, F, G, H> Hash for unsafe extern fn(A, B, C, D, E, F, G, H) -> Ret
impl<Ret, A, B, C, D, E, F, G, H> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I> Hash for fn(A, B, C, D, E, F, G, H, I) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I> Hash for extern fn(A, B, C, D, E, F, G, H, I) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I> Hash for extern fn(A, B, C, D, E, F, G, H, I, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I> Hash for unsafe fn(A, B, C, D, E, F, G, H, I) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for fn(A, B, C, D, E, F, G, H, I, J) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for extern fn(A, B, C, D, E, F, G, H, I, J) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for extern fn(A, B, C, D, E, F, G, H, I, J, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for unsafe fn(A, B, C, D, E, F, G, H, I, J) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I, J) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for extern fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for extern fn(A, B, C, D, E, F, G, H, I, J, K, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for unsafe fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for extern fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for extern fn(A, B, C, D, E, F, G, H, I, J, K, L, ...) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for unsafe fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret
impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Hash for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K, L, ...) -> Ret
impl<T> Hash for PhantomData<T> where T: ?Sized
impl Hash for RangeFull
impl<Idx> Hash for Range<Idx> where Idx: Hash
impl<Idx> Hash for RangeFrom<Idx> where Idx: Hash
impl<Idx> Hash for RangeTo<Idx> where Idx: Hash
impl<Idx> Hash for RangeInclusive<Idx> where Idx: Hash
impl<Idx> Hash for RangeToInclusive<Idx> where Idx: Hash
impl Hash for Ordering
impl Hash for TypeId
impl<T> Hash for [T; 0] where T: Hash
impl<T> Hash for [T; 1] where T: Hash
impl<T> Hash for [T; 2] where T: Hash
impl<T> Hash for [T; 3] where T: Hash
impl<T> Hash for [T; 4] where T: Hash
impl<T> Hash for [T; 5] where T: Hash
impl<T> Hash for [T; 6] where T: Hash
impl<T> Hash for [T; 7] where T: Hash
impl<T> Hash for [T; 8] where T: Hash
impl<T> Hash for [T; 9] where T: Hash
impl<T> Hash for [T; 10] where T: Hash
impl<T> Hash for [T; 11] where T: Hash
impl<T> Hash for [T; 12] where T: Hash
impl<T> Hash for [T; 13] where T: Hash
impl<T> Hash for [T; 14] where T: Hash
impl<T> Hash for [T; 15] where T: Hash
impl<T> Hash for [T; 16] where T: Hash
impl<T> Hash for [T; 17] where T: Hash
impl<T> Hash for [T; 18] where T: Hash
impl<T> Hash for [T; 19] where T: Hash
impl<T> Hash for [T; 20] where T: Hash
impl<T> Hash for [T; 21] where T: Hash
impl<T> Hash for [T; 22] where T: Hash
impl<T> Hash for [T; 23] where T: Hash
impl<T> Hash for [T; 24] where T: Hash
impl<T> Hash for [T; 25] where T: Hash
impl<T> Hash for [T; 26] where T: Hash
impl<T> Hash for [T; 27] where T: Hash
impl<T> Hash for [T; 28] where T: Hash
impl<T> Hash for [T; 29] where T: Hash
impl<T> Hash for [T; 30] where T: Hash
impl<T> Hash for [T; 31] where T: Hash
impl<T> Hash for [T; 32] where T: Hash
impl<T> Hash for Option<T> where T: Hash
impl<T, E> Hash for Result<T, E> where E: Hash, T: Hash
impl Hash for u8
impl Hash for u16
impl Hash for u32
impl Hash for u64
impl Hash for usize
impl Hash for i8
impl Hash for i16
impl Hash for i32
impl Hash for i64
impl Hash for isize
impl Hash for ()
impl<A> Hash for (A,) where A: Hash
impl<A, B> Hash for (A, B) where A: Hash, B: Hash
impl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash
impl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash
impl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash
impl<A, B, C, D, E, F> Hash for (A, B, C, D, E, F) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash, F: Hash
impl<A, B, C, D, E, F, G> Hash for (A, B, C, D, E, F, G) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash, F: Hash, G: Hash
impl<A, B, C, D, E, F, G, H> Hash for (A, B, C, D, E, F, G, H) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash, F: Hash, G: Hash, H: Hash
impl<A, B, C, D, E, F, G, H, I> Hash for (A, B, C, D, E, F, G, H, I) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash, F: Hash, G: Hash, H: Hash, I: Hash
impl<A, B, C, D, E, F, G, H, I, J> Hash for (A, B, C, D, E, F, G, H, I, J) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash, F: Hash, G: Hash, H: Hash, I: Hash, J: Hash
impl<A, B, C, D, E, F, G, H, I, J, K> Hash for (A, B, C, D, E, F, G, H, I, J, K) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash, F: Hash, G: Hash, H: Hash, I: Hash, J: Hash, K: Hash
impl<A, B, C, D, E, F, G, H, I, J, K, L> Hash for (A, B, C, D, E, F, G, H, I, J, K, L) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash, F: Hash, G: Hash, H: Hash, I: Hash, J: Hash, K: Hash, L: Hash
impl Hash for Error
impl Hash for Timespec
impl Hash for Tm
impl<T> Hash for Box<T> where T: Hash + ?Sized
impl<T> Hash for Arc<T> where T: Hash + ?Sized
impl<T> Hash for Rc<T> where T: Hash + ?Sized
impl<O, T> Hash for OwningRef<O, T> where T: Hash + ?Sized
impl Hash for OsString
impl Hash for OsStr
impl Hash for Ipv4Addr
impl Hash for Ipv6Addr
impl Hash for SocketAddrV4
impl Hash for SocketAddrV6
impl<'a> Hash for PrefixComponent<'a>
impl Hash for PathBuf
impl Hash for Path
impl Hash for CString
impl Hash for CStr
impl Hash for FileType
impl Hash for ErrorKind
impl Hash for IpAddr
impl Hash for Ipv6MulticastScope
impl Hash for SocketAddr
impl<'a> Hash for Prefix<'a>
impl<'a> Hash for Component<'a>
impl Hash for Duration
impl<K, V, S> Hash for LinkedHashMap<K, V, S> where K: Eq + Hash, S: BuildHasher, V: Hash
impl<A> Hash for ArrayString<A> where A: Array<Item=u8>
impl<A> Hash for ArrayVec<A> where A: Array, A::Item: Hash