1#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
9pub struct KnotId(u16);
10
11#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
13pub struct PortSlot(u8);
14
15#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
17pub struct ThreadId(u16);
18
19#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug, Default)]
21pub struct Seed(pub u64);
22
23#[derive(Copy, Clone, Eq, PartialEq, Debug, Default)]
25pub struct HostTime {
26 pub tick: u64,
28}
29
30macro_rules! dense_id {
31 ($ty:ident, $raw:ty) => {
32 impl $ty {
33 pub const fn get(self) -> $raw {
35 self.0
36 }
37 }
38
39 impl TryFrom<usize> for $ty {
40 type Error = core::num::TryFromIntError;
41
42 fn try_from(value: usize) -> Result<Self, Self::Error> {
43 Ok(Self(<$raw>::try_from(value)?))
44 }
45 }
46
47 impl From<$ty> for usize {
48 fn from(value: $ty) -> Self {
49 usize::from(value.0)
50 }
51 }
52 };
53}
54
55dense_id!(KnotId, u16);
56dense_id!(PortSlot, u8);
57dense_id!(ThreadId, u16);
58
59impl PortSlot {
60 pub const fn new(value: u8) -> Self {
62 Self(value)
63 }
64}