1use std::fmt;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
12pub struct Ordinal(u32);
13
14impl Ordinal {
15 #[must_use]
17 pub const fn new(index: u32) -> Self {
18 Self(index)
19 }
20
21 #[must_use]
23 pub const fn index(self) -> u32 {
24 self.0
25 }
26
27 #[must_use]
29 pub fn as_usize(self) -> usize {
30 usize::try_from(self.0).unwrap_or(usize::MAX)
31 }
32}
33
34impl fmt::Display for Ordinal {
35 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36 write!(f, "#{}", self.0)
37 }
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
42pub struct EdgeKind(u32);
43
44impl EdgeKind {
45 #[must_use]
47 pub const fn new(index: u32) -> Self {
48 Self(index)
49 }
50
51 #[must_use]
53 pub const fn index(self) -> u32 {
54 self.0
55 }
56}
57
58impl fmt::Display for EdgeKind {
59 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
60 write!(f, "kind#{}", self.0)
61 }
62}
63
64#[must_use]
66pub fn to_usize(value: u32) -> usize {
67 usize::try_from(value).unwrap_or(usize::MAX)
68}