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)
}
}