mod collection;
mod item;
use crate::schema::session_service::SessionService as SessionServiceSchema;
use crate::Error;
use crate::NvBmc;
use crate::ServiceRoot;
use nv_redfish_core::Bmc;
use std::sync::Arc;
#[doc(inline)]
pub use crate::schema::session::SessionCreate;
#[doc(inline)]
pub use crate::schema::session::SessionTypes;
#[doc(inline)]
pub use collection::SessionCollection;
#[doc(inline)]
pub use item::Session;
pub struct SessionService<B: Bmc> {
bmc: NvBmc<B>,
service: Arc<SessionServiceSchema>,
}
impl<B: Bmc> SessionService<B> {
pub(crate) async fn new(
bmc: &NvBmc<B>,
root: &ServiceRoot<B>,
) -> Result<Option<Self>, Error<B>> {
if let Some(service_ref) = &root.root.session_service {
let service = service_ref.get(bmc.as_ref()).await.map_err(Error::Bmc)?;
Ok(Some(Self {
bmc: bmc.clone(),
service,
}))
} else {
Ok(None)
}
}
#[must_use]
pub fn raw(&self) -> Arc<SessionServiceSchema> {
self.service.clone()
}
pub async fn sessions(&self) -> Result<Option<SessionCollection<B>>, Error<B>> {
if let Some(collection_ref) = self.service.sessions.as_ref() {
SessionCollection::new(self.bmc.clone(), collection_ref)
.await
.map(Some)
} else {
Ok(None)
}
}
}