graph_api_lib/
element.rs

1use crate::{Label, Value};
2use std::fmt::Debug;
3use std::hash::Hash;
4
5/// An element in a graph. This is either an edge or a vertex.
6pub trait Element: Debug {
7    /// Information about the Label for this element
8    type Label: Eq + Copy + Hash + Debug + Label + 'static;
9
10    /// Returns the label of the element.
11    fn label(&self) -> Self::Label;
12
13    /// Given an index returns the value that is associated with this index.
14    fn value(&self, _index: &<Self::Label as Label>::Index) -> Option<Value> {
15        None
16    }
17}
18
19impl Element for () {
20    type Label = ();
21
22    fn label(&self) -> Self::Label {}
23}
24
25impl Element for u32 {
26    type Label = ();
27
28    fn label(&self) -> Self::Label {}
29}
30
31impl Element for u64 {
32    type Label = ();
33
34    fn label(&self) -> Self::Label {}
35}
36
37impl Element for f32 {
38    type Label = ();
39
40    fn label(&self) -> Self::Label {}
41}
42
43impl Element for f64 {
44    type Label = ();
45
46    fn label(&self) -> Self::Label {}
47}