phoxal_model/component/
mod.rs1pub mod capability;
6
7use std::collections::BTreeMap;
8
9use crate::identity::CapabilityId;
10use crate::simulation::Simulation;
11use crate::structure::Structure;
12use capability::Capability;
13
14#[derive(phoxal_macros::DescribeWire, serde::Serialize, serde::Deserialize, Debug, Clone)]
22#[serde(deny_unknown_fields)]
23pub struct Component {
24 capabilities: BTreeMap<CapabilityId, Capability>,
25 structure: Structure,
26 simulation: Option<Simulation>,
27}
28
29impl Component {
30 pub(crate) fn new(
31 capabilities: BTreeMap<CapabilityId, Capability>,
32 structure: Structure,
33 simulation: Option<Simulation>,
34 ) -> Self {
35 Self {
36 capabilities,
37 structure,
38 simulation,
39 }
40 }
41
42 #[must_use]
44 pub const fn simulation(&self) -> Option<&Simulation> {
45 self.simulation.as_ref()
46 }
47
48 #[must_use]
50 pub fn capability(&self, capability_id: &str) -> Option<&Capability> {
51 self.capabilities.get(capability_id)
52 }
53
54 pub fn capabilities(&self) -> impl ExactSizeIterator<Item = (&CapabilityId, &Capability)> {
56 self.capabilities.iter()
57 }
58
59 #[must_use]
61 pub fn structure(&self) -> &Structure {
62 &self.structure
63 }
64}