use std::sync::Arc;
use crate::core::client::{VimClient, Result};
#[derive(Clone)]
pub struct IscsiManager {
client: Arc<dyn VimClient>,
mo_id: String,
}
impl IscsiManager {
pub fn new(client: Arc<dyn VimClient>, mo_id: &str) -> Self {
Self {
client,
mo_id: mo_id.to_string(),
}
}
pub async fn bind_vnic(&self, i_scsi_hba_name: &str, vnic_device: &str) -> Result<()> {
let input = BindVnicRequestType {i_scsi_hba_name, vnic_device, };
self.client.invoke_void("", "IscsiManager", &self.mo_id, "BindVnic", Some(&input)).await
}
pub async fn query_bound_vnics(&self, i_scsi_hba_name: &str) -> Result<Option<Vec<crate::types::structs::IscsiPortInfo>>> {
let input = QueryBoundVnicsRequestType {i_scsi_hba_name, };
let bytes_opt = self.client.invoke_optional("", "IscsiManager", &self.mo_id, "QueryBoundVnics", 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_candidate_nics(&self, i_scsi_hba_name: &str) -> Result<Option<Vec<crate::types::structs::IscsiPortInfo>>> {
let input = QueryCandidateNicsRequestType {i_scsi_hba_name, };
let bytes_opt = self.client.invoke_optional("", "IscsiManager", &self.mo_id, "QueryCandidateNics", 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_migration_dependencies(&self, pnic_device: &[String]) -> Result<crate::types::structs::IscsiMigrationDependency> {
let input = QueryMigrationDependenciesRequestType {pnic_device, };
let bytes = self.client.invoke("", "IscsiManager", &self.mo_id, "QueryMigrationDependencies", Some(&input)).await?;
let result: crate::types::structs::IscsiMigrationDependency = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn query_pnic_status(&self, pnic_device: &str) -> Result<crate::types::structs::IscsiStatus> {
let input = QueryPnicStatusRequestType {pnic_device, };
let bytes = self.client.invoke("", "IscsiManager", &self.mo_id, "QueryPnicStatus", Some(&input)).await?;
let result: crate::types::structs::IscsiStatus = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn query_vnic_status(&self, vnic_device: &str) -> Result<crate::types::structs::IscsiStatus> {
let input = QueryVnicStatusRequestType {vnic_device, };
let bytes = self.client.invoke("", "IscsiManager", &self.mo_id, "QueryVnicStatus", Some(&input)).await?;
let result: crate::types::structs::IscsiStatus = crate::core::client::unmarshal(self.client.transport(), &bytes)?;
Ok(result)
}
pub async fn unbind_vnic(&self, i_scsi_hba_name: &str, vnic_device: &str, force: bool) -> Result<()> {
let input = UnbindVnicRequestType {i_scsi_hba_name, vnic_device, force, };
self.client.invoke_void("", "IscsiManager", &self.mo_id, "UnbindVnic", Some(&input)).await
}
}
struct BindVnicRequestType<'a> {
i_scsi_hba_name: &'a str,
vnic_device: &'a str,
}
impl<'a> miniserde::Serialize for BindVnicRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(BindVnicRequestTypeSer { data: self, seq: 0 }))
}
}
struct BindVnicRequestTypeSer<'b, 'a> {
data: &'b BindVnicRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for BindVnicRequestTypeSer<'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"), &"BindVnicRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("iScsiHbaName"), &self.data.i_scsi_hba_name as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("vnicDevice"), &self.data.vnic_device as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct QueryBoundVnicsRequestType<'a> {
i_scsi_hba_name: &'a str,
}
impl<'a> miniserde::Serialize for QueryBoundVnicsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(QueryBoundVnicsRequestTypeSer { data: self, seq: 0 }))
}
}
struct QueryBoundVnicsRequestTypeSer<'b, 'a> {
data: &'b QueryBoundVnicsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for QueryBoundVnicsRequestTypeSer<'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"), &"QueryBoundVnicsRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("iScsiHbaName"), &self.data.i_scsi_hba_name as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct QueryCandidateNicsRequestType<'a> {
i_scsi_hba_name: &'a str,
}
impl<'a> miniserde::Serialize for QueryCandidateNicsRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(QueryCandidateNicsRequestTypeSer { data: self, seq: 0 }))
}
}
struct QueryCandidateNicsRequestTypeSer<'b, 'a> {
data: &'b QueryCandidateNicsRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for QueryCandidateNicsRequestTypeSer<'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"), &"QueryCandidateNicsRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("iScsiHbaName"), &self.data.i_scsi_hba_name as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct QueryMigrationDependenciesRequestType<'a> {
pnic_device: &'a [String],
}
impl<'a> miniserde::Serialize for QueryMigrationDependenciesRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(QueryMigrationDependenciesRequestTypeSer { data: self, seq: 0 }))
}
}
struct QueryMigrationDependenciesRequestTypeSer<'b, 'a> {
data: &'b QueryMigrationDependenciesRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for QueryMigrationDependenciesRequestTypeSer<'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"), &"QueryMigrationDependenciesRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("pnicDevice"), &self.data.pnic_device as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct QueryPnicStatusRequestType<'a> {
pnic_device: &'a str,
}
impl<'a> miniserde::Serialize for QueryPnicStatusRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(QueryPnicStatusRequestTypeSer { data: self, seq: 0 }))
}
}
struct QueryPnicStatusRequestTypeSer<'b, 'a> {
data: &'b QueryPnicStatusRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for QueryPnicStatusRequestTypeSer<'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"), &"QueryPnicStatusRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("pnicDevice"), &self.data.pnic_device as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct QueryVnicStatusRequestType<'a> {
vnic_device: &'a str,
}
impl<'a> miniserde::Serialize for QueryVnicStatusRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(QueryVnicStatusRequestTypeSer { data: self, seq: 0 }))
}
}
struct QueryVnicStatusRequestTypeSer<'b, 'a> {
data: &'b QueryVnicStatusRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for QueryVnicStatusRequestTypeSer<'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"), &"QueryVnicStatusRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("vnicDevice"), &self.data.vnic_device as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct UnbindVnicRequestType<'a> {
i_scsi_hba_name: &'a str,
vnic_device: &'a str,
force: bool,
}
impl<'a> miniserde::Serialize for UnbindVnicRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(UnbindVnicRequestTypeSer { data: self, seq: 0 }))
}
}
struct UnbindVnicRequestTypeSer<'b, 'a> {
data: &'b UnbindVnicRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for UnbindVnicRequestTypeSer<'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"), &"UnbindVnicRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("iScsiHbaName"), &self.data.i_scsi_hba_name as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("vnicDevice"), &self.data.vnic_device as &dyn miniserde::Serialize)),
3 => return Some((std::borrow::Cow::Borrowed("force"), &self.data.force as &dyn miniserde::Serialize)),
_ => return None,
}
}
}