graphrecords_query/capabilities/
equivalence.rs1use 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}