pub trait Hash {
// Required method
fn hash<H>(&self, state: &mut H)
where H: Hasher;
// Provided method
fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher,
Self: Sized { ... }
}Expand description
A hashable type.
Types implementing Hash are able to be hashed with an instance of
Hasher.
§Implementing Hash
You can derive Hash with #[derive(Hash)] if all fields implement Hash.
The resulting hash will be the combination of the values from calling
hash on each field.
#[derive(Hash)]
struct Rustacean {
name: String,
country: String,
}If you need more control over how a value is hashed, you can of course
implement the Hash trait yourself:
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);
}
}§Hash and Eq
When implementing both Hash and Eq, it is important that the following
property holds:
k1 == k2 -> hash(k1) == hash(k2)In other words, if two keys are equal, their hashes must also be equal.
HashMap and HashSet both rely on this behavior.
Thankfully, you won’t need to worry about upholding this property when
deriving both Eq and Hash with #[derive(PartialEq, Eq, Hash)].
Violating this property is a logic error. The behavior resulting from a logic error is not
specified, but users of the trait must ensure that such logic errors do not result in
undefined behavior. This means that unsafe code must not rely on the correctness of these
methods.
§Prefix collisions
Implementations of hash should ensure that the data they
pass to the Hasher are prefix-free. That is,
values which are not equal should cause two different sequences of values to be written,
and neither of the two sequences should be a prefix of the other.
For example, the standard implementation of Hash for &str passes an extra
0xFF byte to the Hasher so that the values ("ab", "c") and ("a", "bc") hash differently.
§Portability
Due to differences in endianness and type sizes, data fed by Hash to a Hasher
should not be considered portable across platforms. Additionally the data passed by most
standard library types should not be considered stable between compiler versions.
This means tests shouldn’t probe hard-coded hash values or data fed to a Hasher and
instead should check consistency with Eq.
Serialization formats intended to be portable between platforms or compiler versions should
either avoid encoding hashes or only rely on Hash and Hasher implementations that
provide additional guarantees.
Required Methods§
Provided Methods§
1.3.0 · Sourcefn hash_slice<H>(data: &[Self], state: &mut H)
fn hash_slice<H>(data: &[Self], state: &mut H)
Feeds a slice of this type into the given Hasher.
This method is meant as a convenience, but its implementation is
also explicitly left unspecified. It isn’t guaranteed to be
equivalent to repeated calls of hash and implementations of
Hash should keep that in mind and call hash themselves
if the slice isn’t treated as a whole unit in the PartialEq
implementation.
For example, a VecDeque implementation might naïvely call
as_slices and then hash_slice on each slice, but this
is wrong since the two slices can change with a call to
make_contiguous without affecting the PartialEq
result. Since these slices aren’t treated as singular
units, and instead part of a larger deque, this method cannot
be used.
§Examples
use std::hash::{DefaultHasher, Hash, Hasher};
let mut hasher = DefaultHasher::new();
let numbers = [6, 28, 496, 8128];
Hash::hash_slice(&numbers, &mut hasher);
println!("Hash is {:x}!", hasher.finish());Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
impl Hash for Action
impl Hash for ClientApiHint
impl Hash for ContextCreationApi
impl Hash for ContextReleaseBehavior
impl Hash for ContextRobustnessHint
impl Hash for CursorMode
impl Hash for chaos_framework::Error
impl Hash for EulerRot
impl Hash for FocusedWidget
impl Hash for GamepadAxis
impl Hash for GamepadButton
impl Hash for HistoryDirection
impl Hash for InitError
impl Hash for InitHint
impl Hash for JoystickEvent
impl Hash for JoystickId
impl Hash for MonitorEvent
impl Hash for MouseCursor
impl Hash for OpenGlProfileHint
impl Hash for StandardCursor
impl Hash for StyleColor
impl Hash for SwapInterval
impl Hash for WindowHint
impl Hash for AsciiChar
impl Hash for chaos_framework::__core::cmp::Ordering
impl Hash for Infallible
impl Hash for IpAddr
impl Hash for Ipv6MulticastScope
impl Hash for SocketAddr
impl Hash for IntErrorKind
impl Hash for chaos_framework::__core::sync::atomic::Ordering
impl Hash for std::io::error::ErrorKind
impl Hash for CheckedCastError
impl Hash for PodCastError
impl Hash for byteorder_lite::BigEndian
impl Hash for byteorder_lite::LittleEndian
impl Hash for RoundingMode
impl Hash for BlockType
impl Hash for EnvironmentMap
impl Hash for LevelMode
impl Hash for LineOrder
impl Hash for SampleType
impl Hash for BlockDescription
impl Hash for gif::reader::decoder::Version
impl Hash for glfw::Key
impl Hash for MouseButton
impl Hash for image::color::ColorType
impl Hash for ExtendedColorType
impl Hash for ImageFormatHint
impl Hash for LimitErrorKind
impl Hash for ParameterErrorKind
impl Hash for UnsupportedErrorKind
impl Hash for FilterType
impl Hash for image::images::flat::Error
impl Hash for NormalForm
impl Hash for ImageFormat
impl Hash for CicpColorPrimaries
impl Hash for CicpMatrixCoefficients
impl Hash for CicpTransferCharacteristics
impl Hash for CicpVideoFullRangeFlag
impl Hash for Orientation
impl Hash for imgui::input::keyboard::Key
impl Hash for log::Level
impl Hash for LevelFilter
impl Hash for CompressionStrategy
impl Hash for TDEFLFlush
impl Hash for TDEFLStatus
impl Hash for CompressionLevel
impl Hash for DataFormat
impl Hash for MZError
impl Hash for MZFlush
impl Hash for MZStatus
impl Hash for TINFLStatus
impl Hash for ExtraXYZ
impl Hash for ExtraZXZ
impl Hash for ExtraZYX
impl Hash for IntraXYZ
impl Hash for IntraZXZ
impl Hash for IntraZYX
impl Hash for DataColorSpace
impl Hash for RenderingIntent
impl Hash for BarycentricWeightScale
impl Hash for InterpolationMethod
impl Hash for nom::error::ErrorKind
impl Hash for Sign
impl Hash for Channels
impl Hash for ColorSpace
impl Hash for RawDisplayHandle
impl Hash for RawWindowHandle
impl Hash for tiff::ColorType
impl Hash for TiffUnsupportedError
impl Hash for CompressionMethod
impl Hash for PhotometricInterpretation
impl Hash for PlanarConfiguration
impl Hash for Predictor
impl Hash for ResolutionUnit
impl Hash for SampleFormat
impl Hash for Tag
impl Hash for Type
impl Hash for zerocopy::byteorder::BigEndian
impl Hash for zerocopy::byteorder::LittleEndian
impl Hash for zune_core::log::Level
impl Hash for zune_core::log::Level
impl Hash for bool
impl Hash for char
impl Hash for i8
impl Hash for i16
impl Hash for i32
impl Hash for i64
impl Hash for i128
impl Hash for isize
impl Hash for !
impl Hash for str
impl Hash for u8
impl Hash for u16
impl Hash for u32
impl Hash for u64
impl Hash for u128
impl Hash for ()
impl Hash for usize
impl Hash for DrawFlags
impl Hash for DrawListFlags
impl Hash for BVec2
impl Hash for BVec3
impl Hash for BVec3A
impl Hash for BVec4
impl Hash for BVec4A
impl Hash for BackendFlags
impl Hash for ButtonFlags
impl Hash for ColorEditFlags
impl Hash for ComboBoxFlags
impl Hash for ConfigFlags
impl Hash for DragDropFlags
impl Hash for FontAtlasFlags
impl Hash for I16Vec2
impl Hash for I16Vec3
impl Hash for I16Vec4
impl Hash for I64Vec2
impl Hash for I64Vec3
impl Hash for I64Vec4
impl Hash for IVec2
impl Hash for IVec3
impl Hash for IVec4
impl Hash for Id
impl Hash for ImColor32
impl Hash for ImStr
impl Hash for ImString
impl Hash for InputTextCallback
impl Hash for InputTextFlags
impl Hash for InputTextMultilineCallback
impl Hash for ItemHoveredFlags
impl Hash for JoystickHats
impl Hash for LightHandle
impl Hash for MeshHandle
impl Hash for ModelHandle
impl Hash for Modifiers
impl Hash for SelectableFlags
impl Hash for SkeletalMeshHandle
impl Hash for SliderFlags
impl Hash for TabBarFlags
impl Hash for TabItemFlags
impl Hash for TextureHandle
impl Hash for TextureId
impl Hash for TreeNodeFlags
impl Hash for U16Vec2
impl Hash for U16Vec3
impl Hash for U16Vec4
impl Hash for U64Vec2
impl Hash for U64Vec3
impl Hash for U64Vec4
impl Hash for UVec2
impl Hash for UVec3
impl Hash for UVec4
impl Hash for chaos_framework::Version
impl Hash for WindowFlags
impl Hash for WindowFocusedFlags
impl Hash for WindowHoveredFlags
impl Hash for ImDrawChannel
impl Hash for ImDrawListSplitter
impl Hash for ImFontGlyphRangesBuilder
impl Hash for ImGuiInputTextCallbackData
impl Hash for ImGuiOnceUponAFrame
impl Hash for ImGuiPayload
impl Hash for ImGuiStorage
impl Hash for ImGuiTableColumnSortSpecs
impl Hash for ImGuiTableSortSpecs
impl Hash for ImGuiTextBuffer
impl Hash for ImGuiTextFilter
impl Hash for ImGuiTextRange
impl Hash for ImVector_ImDrawChannel
impl Hash for ImVector_ImDrawCmd
impl Hash for ImVector_ImDrawIdx
impl Hash for ImVector_ImDrawVert
impl Hash for ImVector_ImFontAtlasCustomRect
impl Hash for ImVector_ImFontConfig
impl Hash for ImVector_ImFontGlyph
impl Hash for ImVector_ImFontPtr
impl Hash for ImVector_ImGuiStoragePair
impl Hash for ImVector_ImGuiTextRange
impl Hash for ImVector_ImTextureID
impl Hash for ImVector_ImU32
impl Hash for ImVector_ImVec2
impl Hash for ImVector_ImVec4
impl Hash for ImVector_ImWchar
impl Hash for ImVector_char
impl Hash for ImVector_float
impl Hash for Layout
impl Hash for TypeId
impl Hash for ByteStr
impl Hash for CStr
impl Hash for chaos_framework::__core::fmt::Error
impl Hash for PhantomPinned
impl Hash for Ipv4Addr
impl Hash for Ipv6Addr
impl Hash for SocketAddrV4
impl Hash for SocketAddrV6
impl Hash for RangeFull
impl Hash for Location<'_>
impl Hash for Alignment
impl Hash for Duration
impl Hash for ByteString
impl Hash for CString
impl Hash for String
impl Hash for OsStr
impl Hash for OsString
impl Hash for FileType
impl Hash for UCred
impl Hash for Path
impl Hash for PathBuf
impl Hash for PrefixComponent<'_>
impl Hash for ThreadId
impl Hash for Instant
impl Hash for SystemTime
impl Hash for TileCoordinates
impl Hash for LineIndex
impl Hash for BlockIndex
impl Hash for ValidationOptions
impl Hash for ChannelDescription
impl Hash for ChannelList
impl Hash for IntegerBounds
impl Hash for KeyCode
impl Hash for Text
impl Hash for TileDescription
impl Hash for TimeCode
impl Hash for Requirements
impl Hash for TileIndices
impl Hash for AnyExtension
impl Hash for SampleLayout
impl Hash for LimitSupport
impl Hash for Limits
impl Hash for Rect
impl Hash for Cicp
impl Hash for StreamResult
impl Hash for ParsingOptions
impl Hash for TransformOptions
impl Hash for BigInt
impl Hash for BigUint
impl Hash for ChunkType
impl Hash for Transformations
impl Hash for Header
impl Hash for AndroidDisplayHandle
impl Hash for AndroidNdkWindowHandle
impl Hash for AppKitDisplayHandle
impl Hash for AppKitWindowHandle
impl Hash for HaikuDisplayHandle
impl Hash for HaikuWindowHandle
impl Hash for OhosDisplayHandle
impl Hash for OhosNdkWindowHandle
impl Hash for OrbitalDisplayHandle
impl Hash for OrbitalWindowHandle
impl Hash for UiKitDisplayHandle
impl Hash for UiKitWindowHandle
impl Hash for DrmDisplayHandle
impl Hash for DrmWindowHandle
impl Hash for GbmDisplayHandle
impl Hash for GbmWindowHandle
impl Hash for WaylandDisplayHandle
impl Hash for WaylandWindowHandle
impl Hash for XcbDisplayHandle
impl Hash for XcbWindowHandle
impl Hash for XlibDisplayHandle
impl Hash for XlibWindowHandle
impl Hash for WebCanvasWindowHandle
impl Hash for WebDisplayHandle
impl Hash for WebOffscreenCanvasWindowHandle
impl Hash for WebWindowHandle
impl Hash for Win32WindowHandle
impl Hash for WinRtWindowHandle
impl Hash for WindowsDisplayHandle
impl Hash for IfdPointer
impl<'a> Hash for Component<'a>
impl<'a> Hash for Prefix<'a>
impl<'a> Hash for PhantomContravariantLifetime<'a>
impl<'a> Hash for PhantomCovariantLifetime<'a>
impl<'a> Hash for PhantomInvariantLifetime<'a>
impl<'a> Hash for Metadata<'a>
impl<'a> Hash for MetadataBuilder<'a>
impl<'a> Hash for DisplayHandle<'a>
impl<'a> Hash for WindowHandle<'a>
impl<A> Hash for SmallVec<A>
impl<A, B> Hash for EitherOrBoth<A, B>
impl<A, T> Hash for Aligned<A, T>
impl<B> Hash for Cow<'_, B>
impl<B, C> Hash for ControlFlow<B, C>
impl<Dyn> Hash for DynMetadata<Dyn>where
Dyn: ?Sized,
impl<F> Hash for Fwhere
F: FnPtr,
impl<Idx> Hash for chaos_framework::__core::ops::Range<Idx>where
Idx: Hash,
impl<Idx> Hash for chaos_framework::__core::ops::RangeFrom<Idx>where
Idx: Hash,
impl<Idx> Hash for chaos_framework::__core::ops::RangeInclusive<Idx>where
Idx: Hash,
impl<Idx> Hash for RangeTo<Idx>where
Idx: Hash,
impl<Idx> Hash for chaos_framework::__core::ops::RangeToInclusive<Idx>where
Idx: Hash,
impl<Idx> Hash for chaos_framework::__core::range::Range<Idx>where
Idx: Hash,
impl<Idx> Hash for chaos_framework::__core::range::RangeFrom<Idx>where
Idx: Hash,
impl<Idx> Hash for chaos_framework::__core::range::RangeInclusive<Idx>where
Idx: Hash,
impl<Idx> Hash for chaos_framework::__core::range::RangeToInclusive<Idx>where
Idx: Hash,
impl<K> Hash for DirectoryOffset<K>
impl<K, V, A> Hash for BTreeMap<K, V, A>
impl<L, R> Hash for Either<L, R>
impl<O> Hash for F32<O>where
O: Hash,
impl<O> Hash for F64<O>where
O: Hash,
impl<O> Hash for I16<O>where
O: Hash,
impl<O> Hash for I32<O>where
O: Hash,
impl<O> Hash for I64<O>where
O: Hash,
impl<O> Hash for I128<O>where
O: Hash,
impl<O> Hash for Isize<O>where
O: Hash,
impl<O> Hash for U16<O>where
O: Hash,
impl<O> Hash for U32<O>where
O: Hash,
impl<O> Hash for U64<O>where
O: Hash,
impl<O> Hash for U128<O>where
O: Hash,
impl<O> Hash for Usize<O>where
O: Hash,
impl<P, Container> Hash for ImageBuffer<P, Container>
impl<Ptr> Hash for Pin<Ptr>
impl<Storage> Hash for __BindgenBitfieldUnit<Storage>where
Storage: Hash,
impl<T> Hash for Bound<T>where
T: Hash,
impl<T> Hash for Option<T>where
T: Hash,
impl<T> Hash for Poll<T>where
T: Hash,
impl<T> Hash for *const Twhere
T: ?Sized,
impl<T> Hash for *mut Twhere
T: ?Sized,
impl<T> Hash for &T
impl<T> Hash for &mut T
impl<T> Hash for [T]where
T: Hash,
impl<T> Hash for (T₁, T₂, …, Tₙ)where
T: Hash,
This trait is implemented for tuples up to twelve items long.
impl<T> Hash for Reverse<T>where
T: Hash,
impl<T> Hash for PhantomContravariant<T>where
T: ?Sized,
impl<T> Hash for PhantomCovariant<T>where
T: ?Sized,
impl<T> Hash for PhantomData<T>where
T: ?Sized,
impl<T> Hash for PhantomInvariant<T>where
T: ?Sized,
impl<T> Hash for Discriminant<T>
impl<T> Hash for ManuallyDrop<T>
impl<T> Hash for NonZero<T>where
T: ZeroablePrimitive + Hash,
impl<T> Hash for Saturating<T>where
T: Hash,
impl<T> Hash for Wrapping<T>where
T: Hash,
impl<T> Hash for NonNull<T>where
T: ?Sized,
impl<T> Hash for Exclusive<T>
impl<T> Hash for CachePadded<T>where
T: Hash,
impl<T> Hash for Vec2<T>where
T: Hash,
impl<T> Hash for Luma<T>where
T: Hash,
impl<T> Hash for LumaA<T>where
T: Hash,
impl<T> Hash for image::color::Rgb<T>where
T: Hash,
impl<T> Hash for image::color::Rgba<T>where
T: Hash,
impl<T> Hash for Img<&[T]>where
T: Hash,
impl<T> Hash for Img<&mut [T]>where
T: Hash,
impl<T> Hash for Img<Vec<T>>where
T: Hash,
impl<T> Hash for ColumnMatrix2<T>where
T: Hash,
impl<T> Hash for ColumnMatrix2x3<T>where
T: Hash,
impl<T> Hash for ColumnMatrix2x4<T>where
T: Hash,
impl<T> Hash for ColumnMatrix3<T>where
T: Hash,
impl<T> Hash for ColumnMatrix3x2<T>where
T: Hash,
impl<T> Hash for ColumnMatrix3x4<T>where
T: Hash,
impl<T> Hash for ColumnMatrix4<T>where
T: Hash,
impl<T> Hash for ColumnMatrix4x2<T>where
T: Hash,
impl<T> Hash for ColumnMatrix4x3<T>where
T: Hash,
impl<T> Hash for RowMatrix2<T>where
T: Hash,
impl<T> Hash for RowMatrix2x3<T>where
T: Hash,
impl<T> Hash for RowMatrix2x4<T>where
T: Hash,
impl<T> Hash for RowMatrix3<T>where
T: Hash,
impl<T> Hash for RowMatrix3x2<T>where
T: Hash,
impl<T> Hash for RowMatrix3x4<T>where
T: Hash,
impl<T> Hash for RowMatrix4<T>where
T: Hash,
impl<T> Hash for RowMatrix4x2<T>where
T: Hash,
impl<T> Hash for RowMatrix4x3<T>where
T: Hash,
impl<T> Hash for Quaternion<T>where
T: Hash,
impl<T> Hash for Point2<T>where
T: Hash,
impl<T> Hash for Point3<T>where
T: Hash,
impl<T> Hash for Vector2<T>where
T: Hash,
impl<T> Hash for Vector3<T>where
T: Hash,
impl<T> Hash for Vector4<T>where
T: Hash,
impl<T> Hash for Ratio<T>
impl<T> Hash for Bgr<T>where
T: Hash,
impl<T> Hash for Gray_v08<T>where
T: Hash,
impl<T> Hash for Grb<T>where
T: Hash,
impl<T> Hash for rgb::formats::rgb::Rgb<T>where
T: Hash,
impl<T> Hash for Unalign<T>
impl<T, A> Hash for Box<T, A>
impl<T, A> Hash for BTreeSet<T, A>
impl<T, A> Hash for LinkedList<T, A>
impl<T, A> Hash for VecDeque<T, A>
impl<T, A> Hash for Rc<T, A>
impl<T, A> Hash for UniqueRc<T, A>
impl<T, A> Hash for Arc<T, A>
impl<T, A> Hash for UniqueArc<T, A>
impl<T, A> Hash for Vec<T, A>
The hash of a vector is the same as that of the corresponding slice,
as required by the core::borrow::Borrow implementation.
use std::hash::BuildHasher;
let b = std::hash::RandomState::new();
let v: Vec<u8> = vec![0xa8, 0x3c, 0x09];
let s: &[u8] = &[0xa8, 0x3c, 0x09];
assert_eq!(b.hash_one(v), b.hash_one(s));impl<T, A> Hash for Abgr<T, A>
impl<T, A> Hash for Argb<T, A>
impl<T, A> Hash for Bgra<T, A>
impl<T, A> Hash for GrayA<T, A>
impl<T, A> Hash for GrayAlpha_v08<T, A>
impl<T, A> Hash for rgb::formats::rgba::Rgba<T, A>
impl<T, B> Hash for EulerAngles<T, B>
impl<T, E> Hash for Result<T, E>
impl<T, const CAP: usize> Hash for ArrayVec<T, CAP>where
T: Hash,
impl<T, const N: usize> Hash for [T; N]where
T: Hash,
The hash of an array is the same as that of the corresponding slice,
as required by the Borrow implementation.
use std::hash::BuildHasher;
let b = std::hash::RandomState::new();
let a: [u8; 3] = [0xa8, 0x3c, 0x09];
let s: &[u8] = &[0xa8, 0x3c, 0x09];
assert_eq!(b.hash_one(a), b.hash_one(s));