Skip to main content

agentic_reality/engine/query/
resource.rs

1//! Resource query operations.
2
3use crate::engine::query::QueryEngine;
4use crate::types::error::{RealityError, RealityResult};
5use crate::types::resource::*;
6
7impl<'a> QueryEngine<'a> {
8    pub fn get_body(&self) -> RealityResult<&ResourceBody> {
9        self.engine
10            .resource_store
11            .body
12            .as_ref()
13            .ok_or_else(|| RealityError::NotInitialized("resource body".into()))
14    }
15
16    pub fn get_mind(&self) -> RealityResult<&MindCapacity> {
17        Ok(&self.get_body()?.mind)
18    }
19
20    pub fn get_energy(&self) -> RealityResult<&ProcessingEnergy> {
21        Ok(&self.get_body()?.energy)
22    }
23
24    pub fn get_reach(&self) -> RealityResult<&NetworkReach> {
25        Ok(&self.get_body()?.reach)
26    }
27
28    pub fn get_storage(&self) -> RealityResult<&StorageCapacity> {
29        Ok(&self.get_body()?.storage)
30    }
31
32    pub fn get_visual(&self) -> RealityResult<Option<&GpuCapacity>> {
33        Ok(self.get_body()?.visual.as_ref())
34    }
35
36    pub fn get_sensations(&self) -> RealityResult<&[ResourceSensation]> {
37        Ok(&self.get_body()?.sensations)
38    }
39
40    pub fn get_pressure_gradient(&self) -> RealityResult<&ResourcePressureGradient> {
41        self.engine
42            .resource_store
43            .pressure_gradient
44            .as_ref()
45            .ok_or_else(|| RealityError::NotInitialized("pressure gradient".into()))
46    }
47
48    pub fn get_bottleneck(&self) -> Option<ResourceType> {
49        self.engine
50            .resource_store
51            .pressure_gradient
52            .as_ref()
53            .and_then(|g| g.bottleneck)
54    }
55
56    pub fn get_capabilities(&self) -> RealityResult<&CapabilityMap> {
57        self.engine
58            .resource_store
59            .capabilities
60            .as_ref()
61            .ok_or_else(|| RealityError::NotInitialized("capabilities".into()))
62    }
63
64    pub fn can_do(&self, capability: &str) -> bool {
65        self.engine
66            .resource_store
67            .capabilities
68            .as_ref()
69            .map(|m| {
70                m.capabilities
71                    .iter()
72                    .any(|c| c.name == capability && c.available)
73            })
74            .unwrap_or(false)
75    }
76
77    pub fn get_cost(&self) -> RealityResult<&CostConsciousness> {
78        self.engine
79            .resource_store
80            .cost
81            .as_ref()
82            .ok_or_else(|| RealityError::NotInitialized("cost consciousness".into()))
83    }
84}