Skip to main content

graphrecords_query/capabilities/
comparison.rs

1use 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}