// © 2023 John Breaux //! Convenience trait for dealing with hashable data pub type Hash = u64; pub trait FromHash: From { /// Hashes anything that implements [type@Hash] using the [DefaultHasher](std::collections::hash_map::DefaultHasher) fn hash(hashable: T) -> Hash { use std::hash::Hasher; let mut hasher = std::collections::hash_map::DefaultHasher::new(); hashable.hash(&mut hasher); hasher.finish() } fn from_hash(hashable: T) -> Self where Self: Sized { Self::from(Self::hash(hashable)) } } impl> FromHash for T {}