raphtory_core/entities/properties/
props.rs1use crate::storage::{lazy_vec::IllegalSet, TPropColumnError};
2use raphtory_api::core::entities::properties::prop::Prop;
3use std::fmt::Debug;
4use thiserror::Error;
5
6#[derive(Error, Debug)]
7pub enum TPropError {
8 #[error(transparent)]
9 ColumnError(#[from] TPropColumnError),
10}
11
12#[derive(Error, Debug)]
13pub enum MetadataError {
14 #[error("Attempted to change value of metadata, old: {old}, new: {new}")]
15 IllegalUpdate { old: Prop, new: Prop },
16
17 #[error(transparent)]
18 ColumnError(#[from] TPropColumnError),
19}
20
21impl From<IllegalSet<Option<Prop>>> for MetadataError {
22 fn from(value: IllegalSet<Option<Prop>>) -> Self {
23 let old = value.previous_value.unwrap_or(Prop::str("NONE"));
24 let new = value.new_value.unwrap_or(Prop::str("NONE"));
25 MetadataError::IllegalUpdate { old, new }
26 }
27}
28
29#[cfg(test)]
30mod test {
31 use super::*;
32 use raphtory_api::core::entities::properties::meta::PropMapper;
33 use std::{sync::Arc, thread};
34
35 #[test]
36 fn test_prop_mapper_concurrent() {
37 let values = [Prop::I64(1), Prop::U16(0), Prop::Bool(true), Prop::F64(0.0)];
38 let input_len = values.len();
39
40 let mapper = Arc::new(PropMapper::default());
41 let threads: Vec<_> = values
42 .into_iter()
43 .map(move |v| {
44 let mapper = mapper.clone();
45 thread::spawn(move || mapper.get_or_create_and_validate("test", v.dtype()))
46 })
47 .flat_map(|t| t.join())
48 .collect();
49
50 assert_eq!(threads.len(), input_len); assert_eq!(threads.into_iter().flatten().count(), 1); }
53}