Skip to main content

agentic_reality/engine/query/
topology.rs

1//! Topology query operations.
2
3use crate::engine::query::QueryEngine;
4use crate::types::error::{RealityError, RealityResult};
5use crate::types::ids::DependencyId;
6use crate::types::topology::*;
7
8impl<'a> QueryEngine<'a> {
9    pub fn get_topology_map(&self) -> RealityResult<&DeploymentTopologyMap> {
10        self.engine
11            .topology_store
12            .topology
13            .as_ref()
14            .ok_or_else(|| RealityError::NotInitialized("topology".into()))
15    }
16
17    pub fn get_position(&self) -> RealityResult<&TopologyPosition> {
18        Ok(&self.get_topology_map()?.self_position)
19    }
20
21    pub fn get_upstream(&self) -> RealityResult<&[UpstreamEntity]> {
22        Ok(&self.get_topology_map()?.upstream)
23    }
24
25    pub fn get_downstream(&self) -> RealityResult<&[DownstreamEntity]> {
26        Ok(&self.get_topology_map()?.downstream)
27    }
28
29    pub fn get_dependency(&self, id: &DependencyId) -> RealityResult<&DownstreamEntity> {
30        let topo = self.get_topology_map()?;
31        topo.downstream
32            .iter()
33            .find(|d| d.id == *id)
34            .ok_or_else(|| RealityError::NotFound(format!("dependency {}", id)))
35    }
36
37    pub fn get_siblings(&self) -> RealityResult<&[SiblingEntity]> {
38        Ok(&self.get_topology_map()?.siblings)
39    }
40
41    pub fn get_observers(&self) -> RealityResult<&[ObserverEntity]> {
42        Ok(&self.get_topology_map()?.observers)
43    }
44
45    pub fn get_topology_health(&self) -> RealityResult<&TopologyHealth> {
46        Ok(&self.get_topology_map()?.topology_health)
47    }
48
49    pub fn get_weak_links(&self) -> RealityResult<&[String]> {
50        Ok(&self.get_topology_map()?.topology_health.weak_links)
51    }
52
53    pub fn get_single_points(&self) -> RealityResult<&[String]> {
54        Ok(&self
55            .get_topology_map()?
56            .topology_health
57            .single_points_of_failure)
58    }
59
60    pub fn find_path(&self, _from: &str, _to: &str) -> RealityResult<Vec<String>> {
61        Ok(vec![])
62    }
63
64    pub fn get_neighbor_awareness(&self) -> RealityResult<&NeighborAwareness> {
65        self.engine
66            .topology_store
67            .neighbors
68            .as_ref()
69            .ok_or_else(|| RealityError::NotInitialized("neighbor awareness".into()))
70    }
71}