use std::sync::Arc;
use crate::core::client::{VimClient, Result};
#[derive(Clone)]
pub struct VsanDiagnosticsSystem {
client: Arc<dyn VimClient>,
mo_id: String,
}
impl VsanDiagnosticsSystem {
pub fn new(client: Arc<dyn VimClient>, mo_id: &str) -> Self {
Self {
client,
mo_id: mo_id.to_string(),
}
}
pub async fn create_io_trip_analyzer_recurrences(&self, cluster: &crate::types::structs::ManagedObjectReference, recurrences: &[crate::types::structs::VsanIoTripAnalyzerRecurrence]) -> Result<Vec<crate::types::structs::VsanIoTripAnalyzerRecurrence>> {
let input = CreateIoTripAnalyzerRecurrencesRequestType {cluster, recurrences, };
let bytes = self.client.invoke("vsan", "VsanDiagnosticsSystem", &self.mo_id, "CreateIOTripAnalyzerRecurrences", Some(&input)).await?;
let result: Vec<crate::types::structs::VsanIoTripAnalyzerRecurrence> = crate::core::client::unmarshal_array(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn edit_io_trip_analyzer_recurrences(&self, cluster: &crate::types::structs::ManagedObjectReference, recurrences: &[crate::types::structs::VsanIoTripAnalyzerRecurrence]) -> Result<Vec<crate::types::structs::VsanIoTripAnalyzerRecurrence>> {
let input = EditIoTripAnalyzerRecurrencesRequestType {cluster, recurrences, };
let bytes = self.client.invoke("vsan", "VsanDiagnosticsSystem", &self.mo_id, "EditIOTripAnalyzerRecurrences", Some(&input)).await?;
let result: Vec<crate::types::structs::VsanIoTripAnalyzerRecurrence> = crate::core::client::unmarshal_array(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn get_io_trip_analyzer_scheduler_config(&self, cluster: &crate::types::structs::ManagedObjectReference) -> Result<Option<crate::types::structs::VsanIoTripAnalyzerConfig>> {
let input = GetIoTripAnalyzerSchedulerConfigRequestType {cluster, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanDiagnosticsSystem", &self.mo_id, "GetIOTripAnalyzerSchedulerConfig", Some(&input)).await?;
match bytes_opt {
Some(ref b) => Ok(Some(crate::core::client::unmarshal(self.client.transport(), b)?)),
None => Ok(None),
}
}
pub async fn vsan_get_thresholds(&self, cluster: &crate::types::structs::ManagedObjectReference, entity_type: Option<&str>, metric: Option<&str>) -> Result<Option<Vec<crate::types::structs::VsanDiagnosticsThreshold>>> {
let input = VsanGetThresholdsRequestType {cluster, entity_type, metric, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanDiagnosticsSystem", &self.mo_id, "VsanGetThresholds", 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 query_io_diagnostics_instances(&self, query_spec: &crate::types::structs::VsanIoDiagnosticsInstanceQuerySpec, cluster: Option<&crate::types::structs::ManagedObjectReference>) -> Result<Option<Vec<crate::types::structs::VsanIoDiagnosticsInstance>>> {
let input = QueryIoDiagnosticsInstancesRequestType {query_spec, cluster, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanDiagnosticsSystem", &self.mo_id, "QueryIODiagnosticsInstances", 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 query_io_diagnostics_stats(&self, instance_name: &str, cluster: Option<&crate::types::structs::ManagedObjectReference>) -> Result<Option<Vec<crate::types::structs::VsanIoDiagnosticsTargetStats>>> {
let input = QueryIoDiagnosticsStatsRequestType {instance_name, cluster, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanDiagnosticsSystem", &self.mo_id, "QueryIODiagnosticsStats", 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_network_diagnostics(&self, cluster: &crate::types::structs::ManagedObjectReference, host: Option<&crate::types::structs::ManagedObjectReference>) -> Result<Option<Vec<crate::types::structs::VsanNetworkDiagnostics>>> {
let input = VsanQueryNetworkDiagnosticsRequestType {cluster, host, };
let bytes_opt = self.client.invoke_optional("vsan", "VsanDiagnosticsSystem", &self.mo_id, "VsanQueryNetworkDiagnostics", 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 remove_io_trip_analyzer_recurrences(&self, cluster: &crate::types::structs::ManagedObjectReference, names: &[String]) -> Result<()> {
let input = RemoveIoTripAnalyzerRecurrencesRequestType {cluster, names, };
self.client.invoke_void("vsan", "VsanDiagnosticsSystem", &self.mo_id, "RemoveIOTripAnalyzerRecurrences", Some(&input)).await
}
pub async fn vsan_set_thresholds(&self, cluster: &crate::types::structs::ManagedObjectReference, thresholds: Option<&[crate::types::structs::VsanDiagnosticsThreshold]>) -> Result<()> {
let input = VsanSetThresholdsRequestType {cluster, thresholds, };
self.client.invoke_void("vsan", "VsanDiagnosticsSystem", &self.mo_id, "VsanSetThresholds", Some(&input)).await
}
pub async fn vsan_set_trace_object_policy(&self, cluster: Option<&crate::types::structs::ManagedObjectReference>, trace_object_uuid: &str, profile: Option<&dyn crate::types::traits::VirtualMachineProfileSpecTrait>) -> Result<bool> {
let input = VsanSetTraceObjectPolicyRequestType {cluster, trace_object_uuid, profile, };
let bytes = self.client.invoke("vsan", "VsanDiagnosticsSystem", &self.mo_id, "VsanSetTraceObjectPolicy", Some(&input)).await?;
let result: bool = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn start_io_diagnostics_task(&self, targets: &[crate::types::structs::VsanIoDiagnosticsTarget], cluster: Option<&crate::types::structs::ManagedObjectReference>, duration: Option<i64>) -> Result<crate::types::structs::ManagedObjectReference> {
let input = StartIoDiagnosticsTaskRequestType {targets, cluster, duration, };
let bytes = self.client.invoke("vsan", "VsanDiagnosticsSystem", &self.mo_id, "StartIODiagnosticsTask", Some(&input)).await?;
let result: crate::types::structs::ManagedObjectReference = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
}
struct CreateIoTripAnalyzerRecurrencesRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
recurrences: &'a [crate::types::structs::VsanIoTripAnalyzerRecurrence],
}
impl<'a> miniserde::Serialize for CreateIoTripAnalyzerRecurrencesRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(CreateIoTripAnalyzerRecurrencesRequestTypeSer { data: self, seq: 0 }))
}
}
struct CreateIoTripAnalyzerRecurrencesRequestTypeSer<'b, 'a> {
data: &'b CreateIoTripAnalyzerRecurrencesRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for CreateIoTripAnalyzerRecurrencesRequestTypeSer<'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"), &"CreateIOTripAnalyzerRecurrencesRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("recurrences"), &self.data.recurrences as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct EditIoTripAnalyzerRecurrencesRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
recurrences: &'a [crate::types::structs::VsanIoTripAnalyzerRecurrence],
}
impl<'a> miniserde::Serialize for EditIoTripAnalyzerRecurrencesRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(EditIoTripAnalyzerRecurrencesRequestTypeSer { data: self, seq: 0 }))
}
}
struct EditIoTripAnalyzerRecurrencesRequestTypeSer<'b, 'a> {
data: &'b EditIoTripAnalyzerRecurrencesRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for EditIoTripAnalyzerRecurrencesRequestTypeSer<'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"), &"EditIOTripAnalyzerRecurrencesRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("recurrences"), &self.data.recurrences as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct GetIoTripAnalyzerSchedulerConfigRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
}
impl<'a> miniserde::Serialize for GetIoTripAnalyzerSchedulerConfigRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(GetIoTripAnalyzerSchedulerConfigRequestTypeSer { data: self, seq: 0 }))
}
}
struct GetIoTripAnalyzerSchedulerConfigRequestTypeSer<'b, 'a> {
data: &'b GetIoTripAnalyzerSchedulerConfigRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for GetIoTripAnalyzerSchedulerConfigRequestTypeSer<'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"), &"GetIOTripAnalyzerSchedulerConfigRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanGetThresholdsRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
entity_type: Option<&'a str>,
metric: Option<&'a str>,
}
impl<'a> miniserde::Serialize for VsanGetThresholdsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanGetThresholdsRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanGetThresholdsRequestTypeSer<'b, 'a> {
data: &'b VsanGetThresholdsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanGetThresholdsRequestTypeSer<'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"), &"VsanGetThresholdsRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.entity_type else { continue; };
return Some((std::borrow::Cow::Borrowed("entityType"), val as &dyn miniserde::Serialize));
}
3 => {
let Some(ref val) = self.data.metric else { continue; };
return Some((std::borrow::Cow::Borrowed("metric"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct QueryIoDiagnosticsInstancesRequestType<'a> {
query_spec: &'a crate::types::structs::VsanIoDiagnosticsInstanceQuerySpec,
cluster: Option<&'a crate::types::structs::ManagedObjectReference>,
}
impl<'a> miniserde::Serialize for QueryIoDiagnosticsInstancesRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(QueryIoDiagnosticsInstancesRequestTypeSer { data: self, seq: 0 }))
}
}
struct QueryIoDiagnosticsInstancesRequestTypeSer<'b, 'a> {
data: &'b QueryIoDiagnosticsInstancesRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for QueryIoDiagnosticsInstancesRequestTypeSer<'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"), &"QueryIODiagnosticsInstancesRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("querySpec"), &self.data.query_spec as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.cluster else { continue; };
return Some((std::borrow::Cow::Borrowed("cluster"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct QueryIoDiagnosticsStatsRequestType<'a> {
instance_name: &'a str,
cluster: Option<&'a crate::types::structs::ManagedObjectReference>,
}
impl<'a> miniserde::Serialize for QueryIoDiagnosticsStatsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(QueryIoDiagnosticsStatsRequestTypeSer { data: self, seq: 0 }))
}
}
struct QueryIoDiagnosticsStatsRequestTypeSer<'b, 'a> {
data: &'b QueryIoDiagnosticsStatsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for QueryIoDiagnosticsStatsRequestTypeSer<'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"), &"QueryIODiagnosticsStatsRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("instanceName"), &self.data.instance_name as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.cluster else { continue; };
return Some((std::borrow::Cow::Borrowed("cluster"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanQueryNetworkDiagnosticsRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
host: Option<&'a crate::types::structs::ManagedObjectReference>,
}
impl<'a> miniserde::Serialize for VsanQueryNetworkDiagnosticsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanQueryNetworkDiagnosticsRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanQueryNetworkDiagnosticsRequestTypeSer<'b, 'a> {
data: &'b VsanQueryNetworkDiagnosticsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanQueryNetworkDiagnosticsRequestTypeSer<'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"), &"VsanQueryNetworkDiagnosticsRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.host else { continue; };
return Some((std::borrow::Cow::Borrowed("host"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct RemoveIoTripAnalyzerRecurrencesRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
names: &'a [String],
}
impl<'a> miniserde::Serialize for RemoveIoTripAnalyzerRecurrencesRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(RemoveIoTripAnalyzerRecurrencesRequestTypeSer { data: self, seq: 0 }))
}
}
struct RemoveIoTripAnalyzerRecurrencesRequestTypeSer<'b, 'a> {
data: &'b RemoveIoTripAnalyzerRecurrencesRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for RemoveIoTripAnalyzerRecurrencesRequestTypeSer<'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"), &"RemoveIOTripAnalyzerRecurrencesRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("names"), &self.data.names as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct VsanSetThresholdsRequestType<'a> {
cluster: &'a crate::types::structs::ManagedObjectReference,
thresholds: Option<&'a [crate::types::structs::VsanDiagnosticsThreshold]>,
}
impl<'a> miniserde::Serialize for VsanSetThresholdsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanSetThresholdsRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanSetThresholdsRequestTypeSer<'b, 'a> {
data: &'b VsanSetThresholdsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanSetThresholdsRequestTypeSer<'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"), &"VsanSetThresholdsRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("cluster"), &self.data.cluster as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.thresholds else { continue; };
return Some((std::borrow::Cow::Borrowed("thresholds"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct VsanSetTraceObjectPolicyRequestType<'a> {
cluster: Option<&'a crate::types::structs::ManagedObjectReference>,
trace_object_uuid: &'a str,
profile: Option<&'a dyn crate::types::traits::VirtualMachineProfileSpecTrait>,
}
impl<'a> miniserde::Serialize for VsanSetTraceObjectPolicyRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(VsanSetTraceObjectPolicyRequestTypeSer { data: self, seq: 0 }))
}
}
struct VsanSetTraceObjectPolicyRequestTypeSer<'b, 'a> {
data: &'b VsanSetTraceObjectPolicyRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for VsanSetTraceObjectPolicyRequestTypeSer<'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"), &"VsanSetTraceObjectPolicyRequestType")),
1 => {
let Some(ref val) = self.data.cluster else { continue; };
return Some((std::borrow::Cow::Borrowed("cluster"), val as &dyn miniserde::Serialize));
}
2 => return Some((std::borrow::Cow::Borrowed("traceObjectUuid"), &self.data.trace_object_uuid as &dyn miniserde::Serialize)),
3 => {
let Some(ref val) = self.data.profile else { continue; };
return Some((std::borrow::Cow::Borrowed("profile"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}
struct StartIoDiagnosticsTaskRequestType<'a> {
targets: &'a [crate::types::structs::VsanIoDiagnosticsTarget],
cluster: Option<&'a crate::types::structs::ManagedObjectReference>,
duration: Option<i64>,
}
impl<'a> miniserde::Serialize for StartIoDiagnosticsTaskRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(StartIoDiagnosticsTaskRequestTypeSer { data: self, seq: 0 }))
}
}
struct StartIoDiagnosticsTaskRequestTypeSer<'b, 'a> {
data: &'b StartIoDiagnosticsTaskRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for StartIoDiagnosticsTaskRequestTypeSer<'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"), &"StartIODiagnosticsTaskRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("targets"), &self.data.targets as &dyn miniserde::Serialize)),
2 => {
let Some(ref val) = self.data.cluster else { continue; };
return Some((std::borrow::Cow::Borrowed("cluster"), val as &dyn miniserde::Serialize));
}
3 => {
let Some(ref val) = self.data.duration else { continue; };
return Some((std::borrow::Cow::Borrowed("duration"), val as &dyn miniserde::Serialize));
}
_ => return None,
}
}
}
}