Skip to main content

weavatrix_graph/working/
key.rs

1use serde::{Deserialize, Serialize};
2
3macro_rules! stable_key {
4    ($name:ident) => {
5        #[derive(
6            Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize,
7        )]
8        pub struct $name {
9            slot: u32,
10            generation: u32,
11        }
12
13        impl $name {
14            pub(crate) const fn new(slot: u32, generation: u32) -> Self {
15                Self { slot, generation }
16            }
17
18            #[must_use]
19            pub const fn slot(self) -> u32 {
20                self.slot
21            }
22
23            #[must_use]
24            pub const fn generation(self) -> u32 {
25                self.generation
26            }
27
28            #[must_use]
29            pub const fn index(self) -> usize {
30                self.slot() as usize
31            }
32        }
33    };
34}
35
36stable_key!(StableNodeKey);
37stable_key!(StableEdgeKey);