graphrecords_query/capabilities/arithmetic/
multiply.rs1use crate::{AttributeName, Failure, IndexValue, Positional, QueryResult, Scalar, ValueDomain};
2use graphrecords_core::graphrecord::{EdgeIndex, GraphRecordValue, NodeIndex};
3
4pub trait ValueMultiply: ValueDomain {
5 fn multiply<'a>(
6 label: &'static str,
7 value: Self::Value<'a>,
8 argument: Self::Value<'a>,
9 ) -> QueryResult<Self::Value<'a>>;
10}
11
12impl ValueMultiply for Scalar {
13 fn multiply<'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 ValueMultiply for AttributeName {
23 fn multiply<'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 ValueMultiply for IndexValue<Positional> {
33 fn multiply<'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 ValueMultiply for IndexValue<NodeIndex> {
43 fn multiply<'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 ValueMultiply for IndexValue<AttributeName> {
53 fn multiply<'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 ValueMultiply for IndexValue<EdgeIndex> {
63 fn multiply<'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 ValueMultiply for IndexValue<GraphRecordValue> {
73 fn multiply<'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}