graphrecords_query/capabilities/arithmetic/
subtract.rs1use crate::{AttributeName, Failure, IndexValue, Positional, QueryResult, Scalar, ValueDomain};
2use graphrecords_core::graphrecord::{EdgeIndex, GraphRecordValue, NodeIndex};
3
4pub trait ValueSubtract: ValueDomain {
5 fn subtract<'a>(
6 label: &'static str,
7 value: Self::Value<'a>,
8 argument: Self::Value<'a>,
9 ) -> QueryResult<Self::Value<'a>>;
10}
11
12impl ValueSubtract for Scalar {
13 fn subtract<'a>(
14 label: &'static str,
15 value: Self::Value<'a>,
16 argument: Self::Value<'a>,
17 ) -> QueryResult<Self::Value<'a>> {
18 (value - argument).map_err(|error| Failure::new(label, error))
19 }
20}
21
22impl ValueSubtract for AttributeName {
23 fn subtract<'a>(
24 label: &'static str,
25 value: Self::Value<'a>,
26 argument: Self::Value<'a>,
27 ) -> QueryResult<Self::Value<'a>> {
28 (value - argument).map_err(|error| Failure::new(label, error))
29 }
30}
31
32impl ValueSubtract for IndexValue<Positional> {
33 fn subtract<'a>(
34 _label: &'static str,
35 value: Self::Value<'a>,
36 argument: Self::Value<'a>,
37 ) -> QueryResult<Self::Value<'a>> {
38 Ok(value - argument)
39 }
40}
41
42impl ValueSubtract for IndexValue<NodeIndex> {
43 fn subtract<'a>(
44 label: &'static str,
45 value: Self::Value<'a>,
46 argument: Self::Value<'a>,
47 ) -> QueryResult<Self::Value<'a>> {
48 (value - argument).map_err(|error| Failure::new(label, error))
49 }
50}
51
52impl ValueSubtract for IndexValue<AttributeName> {
53 fn subtract<'a>(
54 label: &'static str,
55 value: Self::Value<'a>,
56 argument: Self::Value<'a>,
57 ) -> QueryResult<Self::Value<'a>> {
58 (value - argument).map_err(|error| Failure::new(label, error))
59 }
60}
61
62impl ValueSubtract for IndexValue<EdgeIndex> {
63 fn subtract<'a>(
64 _label: &'static str,
65 value: Self::Value<'a>,
66 argument: Self::Value<'a>,
67 ) -> QueryResult<Self::Value<'a>> {
68 Ok(value - argument)
69 }
70}
71
72impl ValueSubtract for IndexValue<GraphRecordValue> {
73 fn subtract<'a>(
74 label: &'static str,
75 value: Self::Value<'a>,
76 argument: Self::Value<'a>,
77 ) -> QueryResult<Self::Value<'a>> {
78 (value - argument).map_err(|error| Failure::new(label, error))
79 }
80}