graphrecords_query/capabilities/
comparison.rs1use crate::{AttributeName, FailureKindValue, IndexDomain, IndexValue, Mask, Scalar, ValueDomain};
2use std::cmp::Ordering;
3
4pub trait ValueEquality: ValueDomain {
5 fn equal<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> bool;
6}
7
8pub trait ValueOrdering: ValueEquality {
9 fn ordering<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> Option<Ordering>;
10}
11
12impl ValueEquality for Scalar {
13 fn equal<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> bool {
14 value == argument
15 }
16}
17
18impl ValueOrdering for Scalar {
19 fn ordering<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> Option<Ordering> {
20 value.partial_cmp(argument)
21 }
22}
23
24impl ValueEquality for AttributeName {
25 fn equal<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> bool {
26 value == argument
27 }
28}
29
30impl ValueOrdering for AttributeName {
31 fn ordering<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> Option<Ordering> {
32 value.partial_cmp(argument)
33 }
34}
35
36impl ValueEquality for Mask {
37 fn equal<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> bool {
38 value == argument
39 }
40}
41
42impl<I: IndexDomain> ValueEquality for IndexValue<I> {
43 fn equal<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> bool {
44 value == argument
45 }
46}
47
48impl<I> ValueOrdering for IndexValue<I>
49where
50 I: IndexDomain,
51 I::Owned: PartialOrd,
52{
53 fn ordering<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> Option<Ordering> {
54 value.partial_cmp(argument)
55 }
56}
57
58impl ValueEquality for FailureKindValue {
59 fn equal<'a>(value: &Self::Value<'a>, argument: &Self::Value<'a>) -> bool {
60 value == argument
61 }
62}