18 lines
647 B
Rust
18 lines
647 B
Rust
// © 2023 John Breaux
|
|
//! Convenience trait for dealing with hashable data
|
|
pub type Hash = u64;
|
|
pub trait FromHash: From<Hash> {
|
|
/// Hashes anything that implements [type@Hash] using the [DefaultHasher](std::collections::hash_map::DefaultHasher)
|
|
fn hash<T: std::hash::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<T: std::hash::Hash>(hashable: T) -> Self
|
|
where Self: Sized {
|
|
Self::from(Self::hash(hashable))
|
|
}
|
|
}
|
|
impl<T: From<Hash>> FromHash for T {}
|