Expand description
§Traits and utilities for making hashes of any type
This crate provides the Hash, Hasher and BuildHasher traits, which are almost
exactly like their counterparts in core/std, except that Hasher and BuildHasher
are generic over the type of the hash, and Hash can be used with any type of hash.
A derive macro for Hash is available.
The Hash trait uses the HasherWrite trait for hashing, which has all the write
methods you’re familiar with from Hasher in core except for the finish method,
because Hash doesn’t know the type of the hash.
Hashing algorithms implement the Hasher and HasherWrite traits. Hasher is
generic over the type of the hash and only contains the finish method. It depends on
HasherWrite, so you can use it just like Hasher from core.
This crate also provides tools for working with endian independent hashes, and a few hasher implementations.
§Features
The crate is no_std and doesn’t enable any features by default. The following features are available:
alloc: Enable trait implementations for the standardalloccrate.std: Enable trait implementations for the standardstdcrate. Impliesalloc.
Optional integrations:
bnum: ImplementHashfor thebnumcrate’s types, and add support for using them as the hash type for the built-in hashers that can use them.
Built-in hashers:
fnv: Hashers using the Fnv1 and Fnv1a algorithms.spooky: Hashers using the SpookyHash algorithm. V1 and V2 are available.xxh64: Hasher using the Xxh64 algorithm.
Modules§
- fnv
fnv - Hasher and collections using the Fnv hashing algorithm.
- spooky
spooky - Hasher and collections using the SpookyHash algorithm.
- xxh64
xxh64 - Hasher and collections using the Xxh64 hashing algorithm.
Macros§
- impl_
core_ build_ hasher - Implement
core::Hash::BuildHasherfor types that already implementBuildHasher<u64>. - impl_
core_ hash - Implement
core::Hash::Hashfor types that already implementHash. - impl_
core_ hasher - Implement
core::Hash::Hasherfor types that already implementHasher<u64>. - impl_
hash - Implement
Hashfor types that already implementcore::hash::Hash. Only use this if you can’t use the derive macro or implementHashyourself. This will panic ifcore::hash::Hasher::finishis called during hashing.
Structs§
- Build
Hasher Default - Used to create a default
BuildHasherinstance for types that implementHasherand Default. - Hasher
Be - Wrapper for types implementing
Hasher<T>to change native endian writes to big endian. - Hasher
BeBuild Hasher BuildHasherfor makingHasherBehashers.- Hasher
Le - Wrapper for types implementing
Hasher<T>to change native endian writes to little endian. - Hasher
LeBuild Hasher BuildHasherfor makingHasherLehashers.
Traits§
- Build
Hasher - A trait for creating instances of
Hasherthat make hashes of typeT. - Endian
Independent Algorithm - Marker trait for hashers that, given the same byte stream, calculates the same hash on hosts of different endiannesses.
- Endian
Independent Hasher - Automatically implemented for
Hashers that implement bothEndianIndependentAlgorithmandEndianIndependentWrites. - Endian
Independent Writes - Marker trait for hashers whose write methods write data in the same order regardless of the endianness of the host. Be aware that a type may write endian dependent data to the hasher in other ways, so this isn’t a guarantee.
- Hash
- A hashable type.
- Hasher
- A trait for hashing an arbitrary stream of bytes.
The write methods are defined in the
HasherWritetrait. - Hasher
Write - A trait for writing data to a hasher.