Skip to main content

graphrecords_query/capabilities/
equivalence.rs

1use crate::{
2    AttributeName, FailureKind, FailureKindValue, IndexDomain, IndexValue, Mask, Scalar,
3    ValueDomain,
4};
5use graphrecords_core::graphrecord::{GraphRecordAttribute, GraphRecordValue};
6use std::hash::Hash;
7
8pub trait ValueEquivalence: ValueDomain {
9    type Key: Eq + Hash;
10
11    fn equivalence_key(value: &Self::Value<'_>) -> Self::Key;
12}
13
14impl ValueEquivalence for Scalar {
15    type Key = GraphRecordValue;
16
17    fn equivalence_key(value: &Self::Value<'_>) -> Self::Key {
18        value.clone()
19    }
20}
21
22impl ValueEquivalence for Mask {
23    type Key = bool;
24
25    fn equivalence_key(value: &Self::Value<'_>) -> Self::Key {
26        *value
27    }
28}
29
30impl ValueEquivalence for AttributeName {
31    type Key = GraphRecordAttribute;
32
33    fn equivalence_key(value: &Self::Value<'_>) -> Self::Key {
34        value.clone()
35    }
36}
37
38impl<I: IndexDomain> ValueEquivalence for IndexValue<I> {
39    type Key = I::Owned;
40
41    fn equivalence_key(value: &Self::Value<'_>) -> Self::Key {
42        value.clone()
43    }
44}
45
46impl ValueEquivalence for FailureKindValue {
47    type Key = FailureKind;
48
49    fn equivalence_key(value: &Self::Value<'_>) -> Self::Key {
50        *value
51    }
52}