use crate::core::Bmc;
use crate::core::NavProperty;
pub use crate::oem::lenovo::schema::lenovo_security_service::FwRollbackState;
use crate::oem::lenovo::schema::lenovo_security_service::LenovoSecurityService as LenovoSecurityServiceSchema;
use crate::Error;
use crate::NvBmc;
use std::convert::identity;
use std::marker::PhantomData;
use std::sync::Arc;
pub struct LenovoSecurityService<B: Bmc> {
data: Arc<LenovoSecurityServiceSchema>,
_marker: PhantomData<B>,
}
impl<B: Bmc> LenovoSecurityService<B> {
pub(crate) async fn new(
bmc: &NvBmc<B>,
nav: &NavProperty<LenovoSecurityServiceSchema>,
) -> Result<Self, Error<B>> {
nav.get(bmc.as_ref())
.await
.map_err(Error::Bmc)
.map(|data| Self {
data,
_marker: PhantomData,
})
}
pub fn fw_rollback(&self) -> Option<FwRollbackState> {
self.data
.configurator
.as_ref()
.and_then(Option::as_ref)
.and_then(|v| v.fw_rollback)
.and_then(identity)
}
}