use crate::core::Bmc;
use crate::core::NavProperty;
use crate::core::ODataId;
use crate::oem::ami::schema::ami_manager::ConfigBmc as ConfigBmcSchema;
use crate::schema::manager::Manager as ManagerSchema;
use crate::Error;
use crate::NvBmc;
use std::marker::PhantomData;
use std::sync::Arc;
#[doc(inline)]
pub use crate::oem::ami::schema::ami_manager::LockdownBiosSettingsChangeState;
#[doc(inline)]
pub use crate::oem::ami::schema::ami_manager::LockdownBiosUpgradeDowngradeState;
#[doc(inline)]
pub use crate::oem::ami::schema::ami_manager::LockoutBiosVariableWriteMode;
#[doc(inline)]
pub use crate::oem::ami::schema::ami_manager::LockoutHostControlState;
pub struct ConfigBmc<B: Bmc> {
data: Arc<ConfigBmcSchema>,
_marker: PhantomData<B>,
}
impl<B: Bmc> ConfigBmc<B> {
pub(crate) async fn new(
bmc: &NvBmc<B>,
manager: &ManagerSchema,
) -> Result<Option<Self>, Error<B>> {
let oem = manager.base.base.oem.as_ref();
if oem
.and_then(|v| v.additional_properties.get("Ami"))
.is_some()
{
if let Some(config_bmc_path) = oem
.and_then(|oem| oem.additional_properties.get("ConfigBMC"))
.and_then(|path| path.as_str())
{
let odata_id = ODataId::from(config_bmc_path.to_string());
bmc.expand_property(&NavProperty::new_reference(odata_id))
.await
.map(|data| Self {
data,
_marker: PhantomData,
})
.map(Some)
} else {
Ok(None)
}
} else {
Ok(None)
}
}
#[must_use]
pub fn raw(&self) -> Arc<ConfigBmcSchema> {
self.data.clone()
}
}