pub mod capability;
use std::collections::BTreeMap;
use crate::model::identity::CapabilityId;
use crate::model::simulation::Simulation;
use crate::model::structure::Structure;
use capability::Capability;
#[derive(phoxal_macros::DescribeWire, serde::Serialize, serde::Deserialize, Debug, Clone)]
#[serde(deny_unknown_fields)]
pub struct Component {
capabilities: BTreeMap<CapabilityId, Capability>,
structure: Structure,
simulation: Option<Simulation>,
}
impl Component {
pub(crate) fn new(
capabilities: BTreeMap<CapabilityId, Capability>,
structure: Structure,
simulation: Option<Simulation>,
) -> Self {
Self {
capabilities,
structure,
simulation,
}
}
#[must_use]
pub const fn simulation(&self) -> Option<&Simulation> {
self.simulation.as_ref()
}
#[must_use]
pub fn capability(&self, capability_id: &str) -> Option<&Capability> {
self.capabilities.get(capability_id)
}
pub fn capabilities(&self) -> impl ExactSizeIterator<Item = (&CapabilityId, &Capability)> {
self.capabilities.iter()
}
#[must_use]
pub fn structure(&self) -> &Structure {
&self.structure
}
}