Skip to main content

graphrecords_query/capabilities/arithmetic/
multiply.rs

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