graph_api_simplegraph/
id.rs1use crate::SimpleGraph;
2use graph_api_lib::{Element, ElementId};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Hash)]
6pub struct VertexId {
7 label: u16,
8 vertex_id: u32,
9}
10
11impl VertexId {
12 pub fn new(label: u16, vertex_id: u32) -> Self {
18 Self { label, vertex_id }
19 }
20
21 pub fn label(&self) -> u16 {
22 self.label
23 }
24
25 pub fn vertex(&self) -> u32 {
26 self.vertex_id
27 }
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Hash)]
32pub struct EdgeId {
33 label: u16,
34 edge_id: u32,
35 head: VertexId,
36 tail: VertexId,
37}
38
39impl EdgeId {
40 pub fn new(label: u16, edge_id: u32, tail: VertexId, head: VertexId) -> Self {
41 Self {
42 label,
43 edge_id,
44 head,
45 tail,
46 }
47 }
48
49 pub fn label(&self) -> u16 {
50 self.label
51 }
52
53 pub fn edge(&self) -> u32 {
54 self.edge_id
55 }
56
57 pub(crate) fn head(&self) -> VertexId {
58 self.head
59 }
60
61 pub(crate) fn tail(&self) -> VertexId {
62 self.tail
63 }
64}
65
66impl<Vertex, Edge> From<VertexId> for ElementId<SimpleGraph<Vertex, Edge>>
67where
68 Vertex: Element,
69 Edge: Element,
70{
71 fn from(val: VertexId) -> Self {
72 ElementId::Vertex(val)
73 }
74}
75
76impl<Vertex, Edge> From<EdgeId> for ElementId<SimpleGraph<Vertex, Edge>>
77where
78 Vertex: Element,
79 Edge: Element,
80{
81 fn from(val: EdgeId) -> Self {
82 ElementId::Edge(val)
83 }
84}
85
86#[cfg(test)]
87mod tests {
88 use super::*;
89
90 #[test]
91 fn test_vertex_id() {
92 let label_id = 42u16;
93 let vertex_id = 12345u32;
94 let vid = VertexId::new(label_id, vertex_id);
95
96 assert_eq!(vid.label(), label_id);
97 assert_eq!(vid.vertex(), { vertex_id });
98 }
99
100 #[test]
101 fn test_edge_id() {
102 let label_id = 24u16;
103 let edge_id = 67890u32;
104 let head = VertexId::new(1, 100);
105 let tail = VertexId::new(2, 200);
106
107 let eid = EdgeId::new(label_id, edge_id, tail, head);
108
109 assert_eq!(eid.label(), label_id);
110 assert_eq!(eid.edge(), edge_id);
111 assert_eq!(eid.head().vertex(), head.vertex());
112 assert_eq!(eid.tail().vertex(), tail.vertex());
113 }
114
115 #[test]
116 fn test_id_conversion() {
117 let vid = VertexId::new(1, 100);
118 let eid = EdgeId::new(2, 200, vid, VertexId::new(3, 300));
119
120 type TestGraph = SimpleGraph<(), ()>;
122
123 let id1: ElementId<TestGraph> = vid.into();
124 let id2: ElementId<TestGraph> = eid.into();
125
126 match id1 {
127 ElementId::Vertex(v) => assert_eq!(v, vid),
128 _ => panic!("Expected Vertex ID"),
129 }
130
131 match id2 {
132 ElementId::Edge(e) => assert_eq!(e, eid),
133 _ => panic!("Expected Edge ID"),
134 }
135 }
136}