graphrecords-query 0.5.0

High-performance graph-based data records
Documentation
use crate::{AttributeName, Failure, IndexValue, Positional, QueryResult, Scalar, ValueDomain};
use graphrecords_core::graphrecord::{EdgeIndex, GraphRecordValue, NodeIndex};

pub trait ValueAdd: ValueDomain {
    fn add<'a>(
        label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>>;
}

impl ValueAdd for Scalar {
    fn add<'a>(
        label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>> {
        (value + argument).map_err(|error| Failure::new(label, error))
    }
}

impl ValueAdd for AttributeName {
    fn add<'a>(
        label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>> {
        (value + argument).map_err(|error| Failure::new(label, error))
    }
}

impl ValueAdd for IndexValue<Positional> {
    fn add<'a>(
        _label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>> {
        Ok(value + argument)
    }
}

impl ValueAdd for IndexValue<NodeIndex> {
    fn add<'a>(
        label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>> {
        (value + argument).map_err(|error| Failure::new(label, error))
    }
}

impl ValueAdd for IndexValue<AttributeName> {
    fn add<'a>(
        label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>> {
        (value + argument).map_err(|error| Failure::new(label, error))
    }
}

impl ValueAdd for IndexValue<EdgeIndex> {
    fn add<'a>(
        _label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>> {
        Ok(value + argument)
    }
}

impl ValueAdd for IndexValue<GraphRecordValue> {
    fn add<'a>(
        label: &'static str,
        value: Self::Value<'a>,
        argument: Self::Value<'a>,
    ) -> QueryResult<Self::Value<'a>> {
        (value + argument).map_err(|error| Failure::new(label, error))
    }
}