raphtory_storage/
layer_ops.rs1use crate::{
2 core_ops::CoreGraphOps,
3 graph::{graph::GraphStorage, locked::LockedGraph},
4};
5use raphtory_api::{
6 core::entities::{Layer, LayerIds},
7 inherit::Base,
8};
9use raphtory_core::entities::graph::tgraph::InvalidLayer;
10use std::sync::Arc;
11
12pub trait InternalLayerOps: CoreGraphOps {
13 fn layer_ids(&self) -> &LayerIds;
15
16 fn layer_ids_from_names(&self, key: Layer) -> Result<LayerIds, InvalidLayer> {
18 let layer_ids = match self.core_graph() {
19 GraphStorage::Mem(LockedGraph { graph, .. }) | GraphStorage::Unlocked(graph) => {
20 graph.layer_ids(key)
21 }
22 #[cfg(feature = "storage")]
23 GraphStorage::Disk(graph) => graph.layer_ids_from_names(key),
24 }?;
25 Ok(layer_ids.intersect(self.layer_ids()))
26 }
27
28 fn valid_layer_ids_from_names(&self, key: Layer) -> LayerIds {
30 let layer_ids = match self.core_graph() {
31 GraphStorage::Unlocked(graph) | GraphStorage::Mem(LockedGraph { graph, .. }) => {
32 graph.valid_layer_ids(key)
33 }
34 #[cfg(feature = "storage")]
35 GraphStorage::Disk(graph) => graph.valid_layer_ids_from_names(key),
36 };
37 layer_ids.intersect(self.layer_ids())
38 }
39}
40
41impl InternalLayerOps for GraphStorage {
42 fn layer_ids(&self) -> &LayerIds {
43 &LayerIds::All
44 }
45}
46
47pub trait InheritLayerOps: Base {}
48
49impl<G: InheritLayerOps + CoreGraphOps> InternalLayerOps for G
50where
51 G::Base: InternalLayerOps,
52{
53 #[inline]
54 fn layer_ids(&self) -> &LayerIds {
55 self.base().layer_ids()
56 }
57}
58
59impl<T: ?Sized> InheritLayerOps for Arc<T> {}
60impl<T: ?Sized> InheritLayerOps for &T {}