weavatrix_graph/working/
key.rs1use 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);