use std::sync::Arc;
use crate::core::client::{VimClient, Result};
#[derive(Clone)]
pub struct HostLocalAccountManager {
client: Arc<dyn VimClient>,
mo_id: String,
}
impl HostLocalAccountManager {
pub fn new(client: Arc<dyn VimClient>, mo_id: &str) -> Self {
Self {
client,
mo_id: mo_id.to_string(),
}
}
pub async fn assign_user_to_group(&self, user: &str, group: &str) -> Result<()> {
let input = AssignUserToGroupRequestType {user, group, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "AssignUserToGroup", Some(&input)).await
}
pub async fn change_password(&self, user: &str, old_password: &str, new_password: &str) -> Result<()> {
let input = ChangePasswordRequestType {user, old_password, new_password, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "ChangePassword", Some(&input)).await
}
pub async fn create_group(&self, group: &dyn crate::types::traits::HostAccountSpecTrait) -> Result<()> {
let input = CreateGroupRequestType {group, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "CreateGroup", Some(&input)).await
}
pub async fn create_user(&self, user: &dyn crate::types::traits::HostAccountSpecTrait) -> Result<()> {
let input = CreateUserRequestType {user, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "CreateUser", Some(&input)).await
}
pub async fn remove_group(&self, group_name: &str) -> Result<()> {
let input = RemoveGroupRequestType {group_name, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "RemoveGroup", Some(&input)).await
}
pub async fn remove_user(&self, user_name: &str) -> Result<()> {
let input = RemoveUserRequestType {user_name, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "RemoveUser", Some(&input)).await
}
pub async fn unassign_user_from_group(&self, user: &str, group: &str) -> Result<()> {
let input = UnassignUserFromGroupRequestType {user, group, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "UnassignUserFromGroup", Some(&input)).await
}
pub async fn update_user(&self, user: &dyn crate::types::traits::HostAccountSpecTrait) -> Result<()> {
let input = UpdateUserRequestType {user, };
self.client.invoke_void("", "HostLocalAccountManager", &self.mo_id, "UpdateUser", Some(&input)).await
}
}
struct AssignUserToGroupRequestType<'a> {
user: &'a str,
group: &'a str,
}
impl<'a> miniserde::Serialize for AssignUserToGroupRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(AssignUserToGroupRequestTypeSer { data: self, seq: 0 }))
}
}
struct AssignUserToGroupRequestTypeSer<'b, 'a> {
data: &'b AssignUserToGroupRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for AssignUserToGroupRequestTypeSer<'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"), &"AssignUserToGroupRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("user"), &self.data.user as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("group"), &self.data.group as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct ChangePasswordRequestType<'a> {
user: &'a str,
old_password: &'a str,
new_password: &'a str,
}
impl<'a> miniserde::Serialize for ChangePasswordRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(ChangePasswordRequestTypeSer { data: self, seq: 0 }))
}
}
struct ChangePasswordRequestTypeSer<'b, 'a> {
data: &'b ChangePasswordRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for ChangePasswordRequestTypeSer<'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"), &"ChangePasswordRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("user"), &self.data.user as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("oldPassword"), &self.data.old_password as &dyn miniserde::Serialize)),
3 => return Some((std::borrow::Cow::Borrowed("newPassword"), &self.data.new_password as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct CreateGroupRequestType<'a> {
group: &'a dyn crate::types::traits::HostAccountSpecTrait,
}
impl<'a> miniserde::Serialize for CreateGroupRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(CreateGroupRequestTypeSer { data: self, seq: 0 }))
}
}
struct CreateGroupRequestTypeSer<'b, 'a> {
data: &'b CreateGroupRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for CreateGroupRequestTypeSer<'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"), &"CreateGroupRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("group"), &self.data.group as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct CreateUserRequestType<'a> {
user: &'a dyn crate::types::traits::HostAccountSpecTrait,
}
impl<'a> miniserde::Serialize for CreateUserRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(CreateUserRequestTypeSer { data: self, seq: 0 }))
}
}
struct CreateUserRequestTypeSer<'b, 'a> {
data: &'b CreateUserRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for CreateUserRequestTypeSer<'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"), &"CreateUserRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("user"), &self.data.user as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct RemoveGroupRequestType<'a> {
group_name: &'a str,
}
impl<'a> miniserde::Serialize for RemoveGroupRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(RemoveGroupRequestTypeSer { data: self, seq: 0 }))
}
}
struct RemoveGroupRequestTypeSer<'b, 'a> {
data: &'b RemoveGroupRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for RemoveGroupRequestTypeSer<'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"), &"RemoveGroupRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("groupName"), &self.data.group_name as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct RemoveUserRequestType<'a> {
user_name: &'a str,
}
impl<'a> miniserde::Serialize for RemoveUserRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(RemoveUserRequestTypeSer { data: self, seq: 0 }))
}
}
struct RemoveUserRequestTypeSer<'b, 'a> {
data: &'b RemoveUserRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for RemoveUserRequestTypeSer<'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"), &"RemoveUserRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("userName"), &self.data.user_name as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct UnassignUserFromGroupRequestType<'a> {
user: &'a str,
group: &'a str,
}
impl<'a> miniserde::Serialize for UnassignUserFromGroupRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(UnassignUserFromGroupRequestTypeSer { data: self, seq: 0 }))
}
}
struct UnassignUserFromGroupRequestTypeSer<'b, 'a> {
data: &'b UnassignUserFromGroupRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for UnassignUserFromGroupRequestTypeSer<'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"), &"UnassignUserFromGroupRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("user"), &self.data.user as &dyn miniserde::Serialize)),
2 => return Some((std::borrow::Cow::Borrowed("group"), &self.data.group as &dyn miniserde::Serialize)),
_ => return None,
}
}
}
struct UpdateUserRequestType<'a> {
user: &'a dyn crate::types::traits::HostAccountSpecTrait,
}
impl<'a> miniserde::Serialize for UpdateUserRequestType<'a> {
fn begin(&self) -> miniserde::ser::Fragment<'_> {
miniserde::ser::Fragment::Map(Box::new(UpdateUserRequestTypeSer { data: self, seq: 0 }))
}
}
struct UpdateUserRequestTypeSer<'b, 'a> {
data: &'b UpdateUserRequestType<'a>,
seq: usize,
}
impl<'b, 'a> miniserde::ser::Map for UpdateUserRequestTypeSer<'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"), &"UpdateUserRequestType")),
1 => return Some((std::borrow::Cow::Borrowed("user"), &self.data.user as &dyn miniserde::Serialize)),
_ => return None,
}
}
}