1use crate::{Label, Value};
2use std::fmt::Debug;
3use std::hash::Hash;
4
5pub trait Element: Debug {
7 type Label: Eq + Copy + Hash + Debug + Label + 'static;
9
10 fn label(&self) -> Self::Label;
12
13 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}