use std::hash::Hash;
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord)]
pub struct ObjectId(u64);
impl Into<u64> for ObjectId {
fn into(self) -> u64 {
self.0
}
}
impl ObjectId {
pub fn new(id: u64) -> Self {
ObjectId(id)
}
pub fn from<T: 'static + Copy + Hash + Eq + PartialEq>(value: T) -> Self {
assert_eq!(std::mem::size_of::<T>(), std::mem::size_of::<u64>());
let id = unsafe { std::mem::transmute_copy(&value) };
ObjectId::new(id)
}
pub fn into<T: 'static + Copy + Hash + Eq + PartialEq>(self) -> T {
assert_eq!(std::mem::size_of::<T>(), std::mem::size_of::<u64>());
unsafe { std::mem::transmute_copy(&self.0) }
}
}