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