1use std::sync::Arc;
2use crate::core::client::{VimClient, Result};
3#[derive(Clone)]
102pub struct HostProfile {
103 client: Arc<dyn VimClient>,
104 mo_id: String,
105}
106impl HostProfile {
107 pub fn new(client: Arc<dyn VimClient>, mo_id: &str) -> Self {
108 Self {
109 client,
110 mo_id: mo_id.to_string(),
111 }
112 }
113 pub async fn host_profile_reset_validation_state(&self) -> Result<()> {
122 let path = format!("/HostProfile/{moId}/HostProfileResetValidationState", moId = &self.mo_id);
123 let req = self.client.post_bare(&path);
124 self.client.execute_void(req).await
125 }
126 pub async fn associate_profile(&self, entity: &[crate::types::structs::ManagedObjectReference]) -> Result<()> {
143 let input = AssociateProfileRequestType {entity, };
144 let path = format!("/HostProfile/{moId}/AssociateProfile", moId = &self.mo_id);
145 let req = self.client.post_json(&path, &input);
146 self.client.execute_void(req).await
147 }
148 pub async fn check_profile_compliance_task(&self, entity: Option<&[crate::types::structs::ManagedObjectReference]>) -> Result<crate::types::structs::ManagedObjectReference> {
169 let input = CheckProfileComplianceRequestType {entity, };
170 let path = format!("/HostProfile/{moId}/CheckProfileCompliance_Task", moId = &self.mo_id);
171 let req = self.client.post_json(&path, &input);
172 let bytes = self.client.execute_bytes(req).await?;
173 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
174 let result: crate::types::structs::ManagedObjectReference = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
175 Ok(result)
176 }
177 pub async fn destroy_profile(&self) -> Result<()> {
181 let path = format!("/HostProfile/{moId}/DestroyProfile", moId = &self.mo_id);
182 let req = self.client.post_bare(&path);
183 self.client.execute_void(req).await
184 }
185 pub async fn dissociate_profile(&self, entity: Option<&[crate::types::structs::ManagedObjectReference]>) -> Result<()> {
201 let input = DissociateProfileRequestType {entity, };
202 let path = format!("/HostProfile/{moId}/DissociateProfile", moId = &self.mo_id);
203 let req = self.client.post_json(&path, &input);
204 self.client.execute_void(req).await
205 }
206 pub async fn execute_host_profile(&self, host: &crate::types::structs::ManagedObjectReference, deferred_param: Option<&[crate::types::structs::ProfileDeferredPolicyOptionParameter]>) -> Result<Box<dyn crate::types::traits::ProfileExecuteResultTrait>> {
256 let input = ExecuteHostProfileRequestType {host, deferred_param, };
257 let path = format!("/HostProfile/{moId}/ExecuteHostProfile", moId = &self.mo_id);
258 let req = self.client.post_json(&path, &input);
259 let bytes = self.client.execute_bytes(req).await?;
260 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
261 let result: Box<dyn crate::types::traits::ProfileExecuteResultTrait> = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
262 Ok(result)
263 }
264 pub async fn export_profile(&self) -> Result<String> {
277 let path = format!("/HostProfile/{moId}/ExportProfile", moId = &self.mo_id);
278 let req = self.client.post_bare(&path);
279 let bytes = self.client.execute_bytes(req).await?;
280 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
281 let result: String = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
282 Ok(result)
283 }
284 pub async fn retrieve_description(&self) -> Result<Option<crate::types::structs::ProfileDescription>> {
292 let path = format!("/HostProfile/{moId}/RetrieveDescription", moId = &self.mo_id);
293 let req = self.client.post_bare(&path);
294 let bytes_opt = self.client.execute_option_bytes(req).await?;
295 match bytes_opt {
296 Some(bytes) => {
297 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
298 Ok(Some(miniserde::json::from_str::<crate::types::structs::ProfileDescription>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
299 }
300 None => Ok(None),
301 }
302 }
303 pub async fn update_host_profile(&self, config: &dyn crate::types::traits::HostProfileConfigSpecTrait) -> Result<()> {
319 let input = UpdateHostProfileRequestType {config, };
320 let path = format!("/HostProfile/{moId}/UpdateHostProfile", moId = &self.mo_id);
321 let req = self.client.post_json(&path, &input);
322 self.client.execute_void(req).await
323 }
324 pub async fn update_reference_host(&self, host: Option<&crate::types::structs::ManagedObjectReference>) -> Result<()> {
336 let input = UpdateReferenceHostRequestType {host, };
337 let path = format!("/HostProfile/{moId}/UpdateReferenceHost", moId = &self.mo_id);
338 let req = self.client.post_json(&path, &input);
339 self.client.execute_void(req).await
340 }
341 pub async fn compliance_check_time(&self) -> Result<Option<String>> {
345 let path = format!("/HostProfile/{moId}/complianceCheckTime", moId = &self.mo_id);
346 let req = self.client.get_request(&path);
347 let bytes_opt = self.client.execute_option_bytes(req).await?;
348 match bytes_opt {
349 Some(bytes) => {
350 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
351 Ok(Some(miniserde::json::from_str::<String>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
352 }
353 None => Ok(None),
354 }
355 }
356 pub async fn compliance_status(&self) -> Result<String> {
364 let path = format!("/HostProfile/{moId}/complianceStatus", moId = &self.mo_id);
365 let req = self.client.get_request(&path);
366 let bytes = self.client.execute_bytes(req).await?;
367 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
368 let result: String = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
369 Ok(result)
370 }
371 pub async fn config(&self) -> Result<Box<dyn crate::types::traits::ProfileConfigInfoTrait>> {
375 let path = format!("/HostProfile/{moId}/config", moId = &self.mo_id);
376 let req = self.client.get_request(&path);
377 let bytes = self.client.execute_bytes(req).await?;
378 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
379 let result: Box<dyn crate::types::traits::ProfileConfigInfoTrait> = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
380 Ok(result)
381 }
382 pub async fn created_time(&self) -> Result<String> {
384 let path = format!("/HostProfile/{moId}/createdTime", moId = &self.mo_id);
385 let req = self.client.get_request(&path);
386 let bytes = self.client.execute_bytes(req).await?;
387 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
388 let result: String = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
389 Ok(result)
390 }
391 pub async fn description(&self) -> Result<Option<crate::types::structs::ProfileDescription>> {
395 let path = format!("/HostProfile/{moId}/description", moId = &self.mo_id);
396 let req = self.client.get_request(&path);
397 let bytes_opt = self.client.execute_option_bytes(req).await?;
398 match bytes_opt {
399 Some(bytes) => {
400 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
401 Ok(Some(miniserde::json::from_str::<crate::types::structs::ProfileDescription>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
402 }
403 None => Ok(None),
404 }
405 }
406 pub async fn entity(&self) -> Result<Option<Vec<crate::types::structs::ManagedObjectReference>>> {
412 let path = format!("/HostProfile/{moId}/entity", moId = &self.mo_id);
413 let req = self.client.get_request(&path);
414 let bytes_opt = self.client.execute_option_bytes(req).await?;
415 match bytes_opt {
416 Some(bytes) => {
417 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
418 Ok(Some(miniserde::json::from_str::<Vec<crate::types::structs::ManagedObjectReference>>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
419 }
420 None => Ok(None),
421 }
422 }
423 pub async fn modified_time(&self) -> Result<String> {
425 let path = format!("/HostProfile/{moId}/modifiedTime", moId = &self.mo_id);
426 let req = self.client.get_request(&path);
427 let bytes = self.client.execute_bytes(req).await?;
428 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
429 let result: String = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
430 Ok(result)
431 }
432 pub async fn name(&self) -> Result<String> {
434 let path = format!("/HostProfile/{moId}/name", moId = &self.mo_id);
435 let req = self.client.get_request(&path);
436 let bytes = self.client.execute_bytes(req).await?;
437 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
438 let result: String = miniserde::json::from_str(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?;
439 Ok(result)
440 }
441 pub async fn reference_host(&self) -> Result<Option<crate::types::structs::ManagedObjectReference>> {
453 let path = format!("/HostProfile/{moId}/referenceHost", moId = &self.mo_id);
454 let req = self.client.get_request(&path);
455 let bytes_opt = self.client.execute_option_bytes(req).await?;
456 match bytes_opt {
457 Some(bytes) => {
458 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
459 Ok(Some(miniserde::json::from_str::<crate::types::structs::ManagedObjectReference>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
460 }
461 None => Ok(None),
462 }
463 }
464 pub async fn validation_failure_info(&self) -> Result<Option<crate::types::structs::HostProfileValidationFailureInfo>> {
470 let path = format!("/HostProfile/{moId}/validationFailureInfo", moId = &self.mo_id);
471 let req = self.client.get_request(&path);
472 let bytes_opt = self.client.execute_option_bytes(req).await?;
473 match bytes_opt {
474 Some(bytes) => {
475 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
476 Ok(Some(miniserde::json::from_str::<crate::types::structs::HostProfileValidationFailureInfo>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
477 }
478 None => Ok(None),
479 }
480 }
481 pub async fn validation_state(&self) -> Result<Option<String>> {
486 let path = format!("/HostProfile/{moId}/validationState", moId = &self.mo_id);
487 let req = self.client.get_request(&path);
488 let bytes_opt = self.client.execute_option_bytes(req).await?;
489 match bytes_opt {
490 Some(bytes) => {
491 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
492 Ok(Some(miniserde::json::from_str::<String>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
493 }
494 None => Ok(None),
495 }
496 }
497 pub async fn validation_state_update_time(&self) -> Result<Option<String>> {
499 let path = format!("/HostProfile/{moId}/validationStateUpdateTime", moId = &self.mo_id);
500 let req = self.client.get_request(&path);
501 let bytes_opt = self.client.execute_option_bytes(req).await?;
502 match bytes_opt {
503 Some(bytes) => {
504 let text = std::str::from_utf8(bytes.as_ref()).map_err(|e| crate::core::client::VimError::ParseError(e.to_string()))?;
505 Ok(Some(miniserde::json::from_str::<String>(text).map_err(|_| crate::core::client::VimError::ParseError("miniserde deserialization failed".to_string()))?))
506 }
507 None => Ok(None),
508 }
509 }
510}
511struct AssociateProfileRequestType<'a> {
512 entity: &'a [crate::types::structs::ManagedObjectReference],
513}
514
515impl<'a> miniserde::Serialize for AssociateProfileRequestType<'a> {
516 fn begin(&self) -> miniserde::ser::Fragment<'_> {
517 miniserde::ser::Fragment::Map(Box::new(AssociateProfileRequestTypeSer { data: self, seq: 0 }))
518 }
519}
520
521struct AssociateProfileRequestTypeSer<'b, 'a> {
522 data: &'b AssociateProfileRequestType<'a>,
523 seq: usize,
524}
525
526impl<'b, 'a> miniserde::ser::Map for AssociateProfileRequestTypeSer<'b, 'a> {
527 fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
528 let seq = self.seq;
529 self.seq += 1;
530 match seq {
531 0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"AssociateProfileRequestType")),
532 1 => return Some((std::borrow::Cow::Borrowed("entity"), &self.data.entity as &dyn miniserde::Serialize)),
533 _ => return None,
534 }
535 }
536}
537struct CheckProfileComplianceRequestType<'a> {
538 entity: Option<&'a [crate::types::structs::ManagedObjectReference]>,
539}
540
541impl<'a> miniserde::Serialize for CheckProfileComplianceRequestType<'a> {
542 fn begin(&self) -> miniserde::ser::Fragment<'_> {
543 miniserde::ser::Fragment::Map(Box::new(CheckProfileComplianceRequestTypeSer { data: self, seq: 0 }))
544 }
545}
546
547struct CheckProfileComplianceRequestTypeSer<'b, 'a> {
548 data: &'b CheckProfileComplianceRequestType<'a>,
549 seq: usize,
550}
551
552impl<'b, 'a> miniserde::ser::Map for CheckProfileComplianceRequestTypeSer<'b, 'a> {
553 fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
554 loop {
555 let seq = self.seq;
556 self.seq += 1;
557 match seq {
558 0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"CheckProfileComplianceRequestType")),
559 1 => {
560 let Some(ref val) = self.data.entity else { continue; };
561 return Some((std::borrow::Cow::Borrowed("entity"), val as &dyn miniserde::Serialize));
562 }
563 _ => return None,
564 }
565 }
566 }
567}
568struct DissociateProfileRequestType<'a> {
569 entity: Option<&'a [crate::types::structs::ManagedObjectReference]>,
570}
571
572impl<'a> miniserde::Serialize for DissociateProfileRequestType<'a> {
573 fn begin(&self) -> miniserde::ser::Fragment<'_> {
574 miniserde::ser::Fragment::Map(Box::new(DissociateProfileRequestTypeSer { data: self, seq: 0 }))
575 }
576}
577
578struct DissociateProfileRequestTypeSer<'b, 'a> {
579 data: &'b DissociateProfileRequestType<'a>,
580 seq: usize,
581}
582
583impl<'b, 'a> miniserde::ser::Map for DissociateProfileRequestTypeSer<'b, 'a> {
584 fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
585 loop {
586 let seq = self.seq;
587 self.seq += 1;
588 match seq {
589 0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"DissociateProfileRequestType")),
590 1 => {
591 let Some(ref val) = self.data.entity else { continue; };
592 return Some((std::borrow::Cow::Borrowed("entity"), val as &dyn miniserde::Serialize));
593 }
594 _ => return None,
595 }
596 }
597 }
598}
599struct ExecuteHostProfileRequestType<'a> {
600 host: &'a crate::types::structs::ManagedObjectReference,
601 deferred_param: Option<&'a [crate::types::structs::ProfileDeferredPolicyOptionParameter]>,
602}
603
604impl<'a> miniserde::Serialize for ExecuteHostProfileRequestType<'a> {
605 fn begin(&self) -> miniserde::ser::Fragment<'_> {
606 miniserde::ser::Fragment::Map(Box::new(ExecuteHostProfileRequestTypeSer { data: self, seq: 0 }))
607 }
608}
609
610struct ExecuteHostProfileRequestTypeSer<'b, 'a> {
611 data: &'b ExecuteHostProfileRequestType<'a>,
612 seq: usize,
613}
614
615impl<'b, 'a> miniserde::ser::Map for ExecuteHostProfileRequestTypeSer<'b, 'a> {
616 fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
617 loop {
618 let seq = self.seq;
619 self.seq += 1;
620 match seq {
621 0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"ExecuteHostProfileRequestType")),
622 1 => return Some((std::borrow::Cow::Borrowed("host"), &self.data.host as &dyn miniserde::Serialize)),
623 2 => {
624 let Some(ref val) = self.data.deferred_param else { continue; };
625 return Some((std::borrow::Cow::Borrowed("deferredParam"), val as &dyn miniserde::Serialize));
626 }
627 _ => return None,
628 }
629 }
630 }
631}
632struct UpdateHostProfileRequestType<'a> {
633 config: &'a dyn crate::types::traits::HostProfileConfigSpecTrait,
634}
635
636impl<'a> miniserde::Serialize for UpdateHostProfileRequestType<'a> {
637 fn begin(&self) -> miniserde::ser::Fragment<'_> {
638 miniserde::ser::Fragment::Map(Box::new(UpdateHostProfileRequestTypeSer { data: self, seq: 0 }))
639 }
640}
641
642struct UpdateHostProfileRequestTypeSer<'b, 'a> {
643 data: &'b UpdateHostProfileRequestType<'a>,
644 seq: usize,
645}
646
647impl<'b, 'a> miniserde::ser::Map for UpdateHostProfileRequestTypeSer<'b, 'a> {
648 fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
649 let seq = self.seq;
650 self.seq += 1;
651 match seq {
652 0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"UpdateHostProfileRequestType")),
653 1 => return Some((std::borrow::Cow::Borrowed("config"), &self.data.config as &dyn miniserde::Serialize)),
654 _ => return None,
655 }
656 }
657}
658struct UpdateReferenceHostRequestType<'a> {
659 host: Option<&'a crate::types::structs::ManagedObjectReference>,
660}
661
662impl<'a> miniserde::Serialize for UpdateReferenceHostRequestType<'a> {
663 fn begin(&self) -> miniserde::ser::Fragment<'_> {
664 miniserde::ser::Fragment::Map(Box::new(UpdateReferenceHostRequestTypeSer { data: self, seq: 0 }))
665 }
666}
667
668struct UpdateReferenceHostRequestTypeSer<'b, 'a> {
669 data: &'b UpdateReferenceHostRequestType<'a>,
670 seq: usize,
671}
672
673impl<'b, 'a> miniserde::ser::Map for UpdateReferenceHostRequestTypeSer<'b, 'a> {
674 fn next(&mut self) -> Option<(std::borrow::Cow<'_, str>, &dyn miniserde::Serialize)> {
675 loop {
676 let seq = self.seq;
677 self.seq += 1;
678 match seq {
679 0 => return Some((std::borrow::Cow::Borrowed("_typeName"), &"UpdateReferenceHostRequestType")),
680 1 => {
681 let Some(ref val) = self.data.host else { continue; };
682 return Some((std::borrow::Cow::Borrowed("host"), val as &dyn miniserde::Serialize));
683 }
684 _ => return None,
685 }
686 }
687 }
688}