#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
pub struct KnotId(u16);
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
pub struct PortSlot(u8);
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
pub struct ThreadId(u16);
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]
pub struct Seed(pub u64);
#[derive(Copy, Clone, Eq, PartialEq, Debug, Default)]
pub struct HostTime {
pub tick: u64,
}
macro_rules! dense_id {
($ty:ident, $raw:ty) => {
impl $ty {
pub const fn get(self) -> $raw {
self.0
}
}
impl TryFrom<usize> for $ty {
type Error = core::num::TryFromIntError;
fn try_from(value: usize) -> Result<Self, Self::Error> {
Ok(Self(<$raw>::try_from(value)?))
}
}
impl From<$ty> for usize {
fn from(value: $ty) -> Self {
usize::from(value.0)
}
}
};
}
dense_id!(KnotId, u16);
dense_id!(PortSlot, u8);
dense_id!(ThreadId, u16);
impl PortSlot {
pub const fn new(value: u8) -> Self {
Self(value)
}
}