graphrecords_query/capabilities/numeric/
round.rs1use crate::{
2 Failure, IndexValue, QueryResult, Scalar, ValueDomain, error::numeric::NonNumericValue,
3};
4use graphrecords_core::graphrecord::{GraphRecordValue, datatypes::Round};
5
6pub trait ValueRound: ValueDomain {
7 fn round<'a>(label: &'static str, value: Self::Value<'a>) -> QueryResult<Self::Value<'a>>;
8}
9
10impl ValueRound for Scalar {
11 fn round<'a>(label: &'static str, value: Self::Value<'a>) -> QueryResult<Self::Value<'a>> {
12 match value {
13 GraphRecordValue::Int(_) | GraphRecordValue::Float(_) => Ok(value.round()),
14 value => Err(Failure::new(label, NonNumericValue::new(value))),
15 }
16 }
17}
18
19impl ValueRound for IndexValue<GraphRecordValue> {
20 fn round<'a>(label: &'static str, value: Self::Value<'a>) -> QueryResult<Self::Value<'a>> {
21 match value {
22 GraphRecordValue::Int(_) | GraphRecordValue::Float(_) => Ok(value.round()),
23 value => Err(Failure::new(label, NonNumericValue::new(value))),
24 }
25 }
26}