raphtory 0.17.0

raphtory, a temporal graph library
Documentation
use crate::{
    errors::{into_graph_err, GraphError},
    prelude::Prop,
};
use raphtory_api::core::{entities::properties::prop::PropType, storage::timeindex::EventTime};
use raphtory_storage::mutation::addition_ops::InternalAdditionOps;

mod addition_ops;
mod deletion_ops;
mod import_ops;
#[cfg(feature = "search")]
pub mod index_ops;
mod property_addition_ops;

pub use addition_ops::AdditionOps;
pub use deletion_ops::DeletionOps;
pub use import_ops::ImportOps;
#[cfg(feature = "search")]
pub use index_ops::IndexMutationOps;
pub use property_addition_ops::PropertyAdditionOps;
pub(crate) use raphtory_api::core::utils::time::{InputTime, TryIntoInputTime};

pub fn time_from_input<G: InternalAdditionOps<Error: Into<GraphError>>, T: TryIntoInputTime>(
    g: &G,
    t: T,
) -> Result<EventTime, GraphError> {
    let t = t.try_into_input_time()?;
    Ok(match t {
        InputTime::Simple(t) => EventTime::new(t, g.next_event_id().map_err(into_graph_err)?),
        InputTime::Indexed(t, s) => EventTime::new(t, s),
    })
}

pub trait CollectProperties {
    fn collect_properties<F: Fn(&str, PropType) -> Result<usize, GraphError>>(
        self,
        id_resolver: F,
    ) -> Result<Vec<(usize, Prop)>, GraphError>;
}

impl<S: AsRef<str>, P: Into<Prop>, PI> CollectProperties for PI
where
    PI: IntoIterator<Item = (S, P)>,
{
    fn collect_properties<F: Fn(&str, PropType) -> Result<usize, GraphError>>(
        self,
        id_resolver: F,
    ) -> Result<Vec<(usize, Prop)>, GraphError>
    where
        PI: IntoIterator<Item = (S, P)>,
    {
        let mut properties: Vec<(usize, Prop)> = Vec::new();
        for (key, value) in self {
            let value: Prop = value.into();
            let prop_id = id_resolver(key.as_ref(), value.dtype())?;
            properties.push((prop_id, value));
        }
        Ok(properties)
    }
}