use std::sync::Arc;
use crate::core::client::{VimClient, Result};
#[derive(Clone)]
pub struct VsanVumSystem {
client: Arc<dyn VimClient>,
mo_id: String,
}
impl VsanVumSystem {
pub fn new(client: Arc<dyn VimClient>, mo_id: &str) -> Self {
Self {
client,
mo_id: mo_id.to_string(),
}
}
pub async fn fetch_iso_depot_cookie(&self, username: &str, password: &str) -> Result<()> {
let input = FetchIsoDepotCookieRequestType {username, password, };
self.client.invoke_void("vsan", "VsanVumSystem", &self.mo_id, "FetchIsoDepotCookie", Some(&input)).await
}
pub async fn get_vsan_vum_config(&self) -> Result<crate::types::structs::VsanVumSystemConfig> {
let bytes = self.client.invoke("vsan", "VsanVumSystem", &self.mo_id, "GetVsanVumConfig", None).await?;
let result: crate::types::structs::VsanVumSystemConfig = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_host_update_firmware(&self, host: &crate::types::structs::ManagedObjectReference) -> Result<crate::types::structs::ManagedObjectReference> {
let input = VsanHostUpdateFirmwareRequestType {host, };
let bytes = self.client.invoke("vsan", "VsanVumSystem", &self.mo_id, "VsanHostUpdateFirmware", Some(&input)).await?;
let result: crate::types::structs::ManagedObjectReference = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_vc_upload_release_db(&self, db: &str) -> Result<()> {
let input = VsanVcUploadReleaseDbRequestType {db, };
self.client.invoke_void("vsan", "VsanVumSystem", &self.mo_id, "VsanVcUploadReleaseDb", Some(&input)).await
}
}
struct FetchIsoDepotCookieRequestType<'a> {
username: &'a str,
password: &'a str,
}
impl<'a> miniserde::Serialize for FetchIsoDepotCookieRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(FetchIsoDepotCookieRequestTypeSer { data: self, seq: 0 }))
}
}
struct FetchIsoDepotCookieRequestTypeSer<'b, 'a> {
data: &'b FetchIsoDepotCookieRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for FetchIsoDepotCookieRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"FetchIsoDepotCookieRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("username"), &self.data.username as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("password"), &self.data.password as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanHostUpdateFirmwareRequestType<'a> {
host: &'a crate::types::structs::ManagedObjectReference,
}
impl<'a> miniserde::Serialize for VsanHostUpdateFirmwareRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanHostUpdateFirmwareRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanHostUpdateFirmwareRequestTypeSer<'b, 'a> {
data: &'b VsanHostUpdateFirmwareRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanHostUpdateFirmwareRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanHostUpdateFirmwareRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("host"), &self.data.host as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanVcUploadReleaseDbRequestType<'a> {
db: &'a str,
}
impl<'a> miniserde::Serialize for VsanVcUploadReleaseDbRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanVcUploadReleaseDbRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanVcUploadReleaseDbRequestTypeSer<'b, 'a> {
data: &'b VsanVcUploadReleaseDbRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanVcUploadReleaseDbRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanVcUploadReleaseDbRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("db"), &self.data.db as &dyn miniserde::Serialize)),
_ => return None,
}
}
}