use super::Port;
use crate::schema::port_collection::PortCollection as PortCollectionSchema;
use crate::Error;
use crate::NvBmc;
use nv_redfish_core::Bmc;
use nv_redfish_core::NavProperty;
use std::sync::Arc;
pub struct PortCollection<B: Bmc> {
bmc: NvBmc<B>,
collection: Arc<PortCollectionSchema>,
}
impl<B: Bmc> PortCollection<B> {
pub(crate) async fn new(
bmc: &NvBmc<B>,
nav: &NavProperty<PortCollectionSchema>,
) -> Result<Self, Error<B>> {
let collection = bmc.expand_property(nav).await?;
Ok(Self {
bmc: bmc.clone(),
collection,
})
}
pub async fn members(&self) -> Result<Vec<Port<B>>, Error<B>> {
let mut members = Vec::new();
for member in &self.collection.members {
members.push(Port::new(&self.bmc, member).await?);
}
Ok(members)
}
}