Skip to main content

raphtory_storage/
layer_ops.rs

1use 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    /// get the layer ids for the graph view
14    fn layer_ids(&self) -> &LayerIds;
15
16    /// Get the layer id for the given layer name
17    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    /// Get the valid layer ids for given layer names
29    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 {}