raphtory 0.17.0

raphtory, a temporal graph library
Documentation
use super::{time_from_input, CollectProperties};
use crate::errors::{into_graph_err, GraphError};
use raphtory_api::core::utils::time::TryIntoInputTime;
use raphtory_storage::mutation::{
    addition_ops::InternalAdditionOps, property_addition_ops::InternalPropertyAdditionOps,
};

pub trait PropertyAdditionOps:
    InternalPropertyAdditionOps<Error: Into<GraphError>> + InternalAdditionOps<Error: Into<GraphError>>
{
    fn add_properties<T: TryIntoInputTime, PI: CollectProperties>(
        &self,
        t: T,
        props: PI,
    ) -> Result<(), GraphError>;

    fn add_metadata<PI: CollectProperties>(&self, props: PI) -> Result<(), GraphError>;
    fn update_metadata<PI: CollectProperties>(&self, props: PI) -> Result<(), GraphError>;
}

impl<
        G: InternalPropertyAdditionOps<Error: Into<GraphError>>
            + InternalAdditionOps<Error: Into<GraphError>>,
    > PropertyAdditionOps for G
{
    fn add_properties<T: TryIntoInputTime, PI: CollectProperties>(
        &self,
        t: T,
        props: PI,
    ) -> Result<(), GraphError> {
        let ti = time_from_input(self, t)?;
        let properties: Vec<_> = props.collect_properties(|name, dtype| {
            Ok(self
                .resolve_graph_property(name, dtype, false)
                .map_err(into_graph_err)?
                .inner())
        })?;
        self.internal_add_properties(ti, &properties)
            .map_err(into_graph_err)?;
        Ok(())
    }

    fn add_metadata<PI: CollectProperties>(&self, props: PI) -> Result<(), GraphError> {
        let properties: Vec<_> = props.collect_properties(|name, dtype| {
            Ok(self
                .resolve_graph_property(name, dtype, true)
                .map_err(into_graph_err)?
                .inner())
        })?;
        self.internal_add_metadata(&properties)
            .map_err(into_graph_err)?;
        Ok(())
    }

    fn update_metadata<PI: CollectProperties>(&self, props: PI) -> Result<(), GraphError> {
        let properties: Vec<_> = props.collect_properties(|name, dtype| {
            Ok(self
                .resolve_graph_property(name, dtype, true)
                .map_err(into_graph_err)?
                .inner())
        })?;
        self.internal_update_metadata(&properties)
            .map_err(into_graph_err)?;
        Ok(())
    }
}