use std::sync::Arc;
use crate::core::client::{VimClient, Result};
#[derive(Clone)]
pub struct VsanRemoteDatastoreSystem {
client: Arc<dyn VimClient>,
mo_id: String,
}
impl VsanRemoteDatastoreSystem {
pub fn new(client: Arc<dyn VimClient>, mo_id: &str) -> Self {
Self {
client,
mo_id: mo_id.to_string(),
}
}
pub async fn vsan_create_datastore_source(&self, datastore_source: &crate::types::structs::VsanHciMeshDatastoreSource) -> Result<crate::types::structs::ManagedObjectReference> {
let input = VsanCreateDatastoreSourceRequestType {datastore_source, };
let bytes = self.client.invoke("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "VsanCreateDatastoreSource", Some(&input)).await?;
let result: crate::types::structs::ManagedObjectReference = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_destroy_datastore_source(&self, datastore_source: &crate::types::structs::VsanHciMeshDatastoreSource) -> Result<crate::types::structs::ManagedObjectReference> {
let input = VsanDestroyDatastoreSourceRequestType {datastore_source, };
let bytes = self.client.invoke("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "VsanDestroyDatastoreSource", Some(&input)).await?;
let result: crate::types::structs::ManagedObjectReference = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn mount_precheck(&self, cluster: &crate::types::structs::ManagedObjectReference, datastore: &crate::types::structs::ManagedObjectReference, server_cluster_info: Option<&crate::types::structs::VcRemoteVsanServerClusterInfo>) -> Result<Box<dyn crate::types::traits::VsanMountPrecheckResultTrait>> {
let input = MountPrecheckRequestType {cluster, datastore, server_cluster_info, };
let bytes = self.client.invoke("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "MountPrecheck", Some(&input)).await?;
let result: Box<dyn crate::types::traits::VsanMountPrecheckResultTrait> = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_precheck_datastore_source(&self, datastore_source: &crate::types::structs::VsanHciMeshDatastoreSource, operation: Option<&str>) -> Result<crate::types::structs::VsanDatastoreSourcePrecheckResult> {
let input = VsanPrecheckDatastoreSourceRequestType {datastore_source, operation, };
let bytes = self.client.invoke("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "VsanPrecheckDatastoreSource", Some(&input)).await?;
let result: crate::types::structs::VsanDatastoreSourcePrecheckResult = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_query_datastore_source(&self, vc_hosts: Option<&[String]>) -> Result<Option<Vec<crate::types::structs::VsanHciMeshDatastoreSource>>> {
let input = VsanQueryDatastoreSourceRequestType {vc_hosts, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "VsanQueryDatastoreSource", Some(&input)).await?;
match bytes_opt {
Some(ref b) => Ok(Some(crate::core::client::unmarshal_array(self.client.transport(), b)?)),
None => Ok(None),
}
}
pub async fn vsan_query_hci_mesh_datastores(&self, query_specs: Option<&[crate::types::structs::VsanXvcQuerySpec]>, extra_vc_infos: Option<&[Box<dyn crate::types::traits::VsanRemoteVcInfoTrait>]>) -> Result<Option<Vec<crate::types::structs::VsanXvcQueryResultSet>>> {
let input = VsanQueryHciMeshDatastoresRequestType {query_specs, extra_vc_infos, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "VsanQueryHciMeshDatastores", Some(&input)).await?;
match bytes_opt {
Some(ref b) => Ok(Some(crate::core::client::unmarshal_array(self.client.transport(), b)?)),
None => Ok(None),
}
}
pub async fn remote_vc_mount_precheck(&self, cluster: &crate::types::structs::ManagedObjectReference, xvc_datastore: &crate::types::structs::VsanXvcDatastoreInfo) -> Result<Box<dyn crate::types::traits::VsanMountPrecheckResultTrait>> {
let input = RemoteVcMountPrecheckRequestType {cluster, xvc_datastore, };
let bytes = self.client.invoke("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "RemoteVcMountPrecheck", Some(&input)).await?;
let result: Box<dyn crate::types::traits::VsanMountPrecheckResultTrait> = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn vsan_update_datastore_source(&self, datastore_source: &crate::types::structs::VsanHciMeshDatastoreSource) -> Result<crate::types::structs::ManagedObjectReference> {
let input = VsanUpdateDatastoreSourceRequestType {datastore_source, };
let bytes = self.client.invoke("vsan", "VsanRemoteDatastoreSystem", &self.mo_id, "VsanUpdateDatastoreSource", Some(&input)).await?;
let result: crate::types::structs::ManagedObjectReference = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
}
struct VsanCreateDatastoreSourceRequestType<'a> {
datastore_source: &'a crate::types::structs::VsanHciMeshDatastoreSource,
}
impl<'a> miniserde::Serialize for VsanCreateDatastoreSourceRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanCreateDatastoreSourceRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanCreateDatastoreSourceRequestTypeSer<'b, 'a> {
data: &'b VsanCreateDatastoreSourceRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanCreateDatastoreSourceRequestTypeSer<'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"), &"VsanCreateDatastoreSourceRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("datastoreSource"), &self.data.datastore_source as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanDestroyDatastoreSourceRequestType<'a> {
datastore_source: &'a crate::types::structs::VsanHciMeshDatastoreSource,
}
impl<'a> miniserde::Serialize for VsanDestroyDatastoreSourceRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanDestroyDatastoreSourceRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanDestroyDatastoreSourceRequestTypeSer<'b, 'a> {
data: &'b VsanDestroyDatastoreSourceRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanDestroyDatastoreSourceRequestTypeSer<'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"), &"VsanDestroyDatastoreSourceRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("datastoreSource"), &self.data.datastore_source as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct MountPrecheckRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
datastore: &'a crate::types::structs::ManagedObjectReference,
server_cluster_info: Option<&'a crate::types::structs::VcRemoteVsanServerClusterInfo>,
}
impl<'a> miniserde::Serialize for MountPrecheckRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(MountPrecheckRequestTypeSer { data: self, seq: 0 }))
}
}
struct MountPrecheckRequestTypeSer<'b, 'a> {
data: &'b MountPrecheckRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for MountPrecheckRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"MountPrecheckRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("datastore"), &self.data.datastore as &dyn miniserde::Serialize)),
3 => {
let Some(ref val) = self.data.server_cluster_info else { continue; };
return Some((std::borrow::Cow::Borrowed("serverClusterInfo"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanPrecheckDatastoreSourceRequestType<'a> {
datastore_source: &'a crate::types::structs::VsanHciMeshDatastoreSource,
operation: Option<&'a str>,
}
impl<'a> miniserde::Serialize for VsanPrecheckDatastoreSourceRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanPrecheckDatastoreSourceRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanPrecheckDatastoreSourceRequestTypeSer<'b, 'a> {
data: &'b VsanPrecheckDatastoreSourceRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanPrecheckDatastoreSourceRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanPrecheckDatastoreSourceRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("datastoreSource"), &self.data.datastore_source as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.operation else { continue; };
return Some((std::borrow::Cow::Borrowed("operation"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanQueryDatastoreSourceRequestType<'a> {
vc_hosts: Option<&'a [String]>,
}
impl<'a> miniserde::Serialize for VsanQueryDatastoreSourceRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanQueryDatastoreSourceRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanQueryDatastoreSourceRequestTypeSer<'b, 'a> {
data: &'b VsanQueryDatastoreSourceRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanQueryDatastoreSourceRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanQueryDatastoreSourceRequestType")),
1 => {
let Some(ref val) = self.data.vc_hosts else { continue; };
return Some((std::borrow::Cow::Borrowed("vcHosts"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanQueryHciMeshDatastoresRequestType<'a> {
query_specs: Option<&'a [crate::types::structs::VsanXvcQuerySpec]>,
extra_vc_infos: Option<&'a [Box<dyn crate::types::traits::VsanRemoteVcInfoTrait>]>,
}
impl<'a> miniserde::Serialize for VsanQueryHciMeshDatastoresRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanQueryHciMeshDatastoresRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanQueryHciMeshDatastoresRequestTypeSer<'b, 'a> {
data: &'b VsanQueryHciMeshDatastoresRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanQueryHciMeshDatastoresRequestTypeSer<'b, 'a> {
fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
loop {
let seq = self.seq;
self.seq += 1;
match seq {
0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"VsanQueryHciMeshDatastoresRequestType")),
1 => {
let Some(ref val) = self.data.query_specs else { continue; };
return Some((std::borrow::Cow::Borrowed("querySpecs"), val as &dyn miniserde::Serialize));
}
2 => {
let Some(ref val) = self.data.extra_vc_infos else { continue; };
return Some((std::borrow::Cow::Borrowed("extraVcInfos"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct RemoteVcMountPrecheckRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
xvc_datastore: &'a crate::types::structs::VsanXvcDatastoreInfo,
}
impl<'a> miniserde::Serialize for RemoteVcMountPrecheckRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(RemoteVcMountPrecheckRequestTypeSer { data: self, seq: 0 }))
}
}
struct RemoteVcMountPrecheckRequestTypeSer<'b, 'a> {
data: &'b RemoteVcMountPrecheckRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for RemoteVcMountPrecheckRequestTypeSer<'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"), &"RemoteVcMountPrecheckRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("xvcDatastore"), &self.data.xvc_datastore as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanUpdateDatastoreSourceRequestType<'a> {
datastore_source: &'a crate::types::structs::VsanHciMeshDatastoreSource,
}
impl<'a> miniserde::Serialize for VsanUpdateDatastoreSourceRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanUpdateDatastoreSourceRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanUpdateDatastoreSourceRequestTypeSer<'b, 'a> {
data: &'b VsanUpdateDatastoreSourceRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanUpdateDatastoreSourceRequestTypeSer<'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"), &"VsanUpdateDatastoreSourceRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("datastoreSource"), &self.data.datastore_source as &dyn miniserde::Serialize)),
_ => return None,
}
}
}