icinga2_api/api/action/
reschedule_check.rs1use serde::{Deserialize, Serialize};
6
7use crate::serde::{deserialize_optional_icinga_timestamp, serialize_optional_icinga_timestamp};
8use crate::types::action::StatusResponse;
9use crate::types::enums::object_type::IcingaObjectType;
10use crate::types::filter::IcingaFilter;
11use crate::types::query::ResultsWrapper;
12use crate::types::rest::{RestApiEndpoint, RestApiResponse};
13
14#[derive(Debug, Clone, derive_builder::Builder, Serialize, Deserialize)]
16#[builder(
17 build_fn(error = "crate::error::Error", validate = "Self::validate"),
18 derive(Debug)
19)]
20pub struct RescheduleCheck {
21 #[serde(
24 serialize_with = "serialize_optional_icinga_timestamp",
25 deserialize_with = "deserialize_optional_icinga_timestamp"
26 )]
27 next_check: Option<time::OffsetDateTime>,
28 force: Option<bool>,
30 #[builder(default, setter(strip_option, into))]
32 #[serde(flatten)]
33 filter: Option<IcingaFilter>,
34}
35
36impl RescheduleCheck {
37 #[must_use]
41 pub fn builder() -> RescheduleCheckBuilder {
42 RescheduleCheckBuilder::default()
43 }
44}
45
46impl RescheduleCheckBuilder {
47 pub fn validate(&self) -> Result<(), crate::error::Error> {
53 if let Some(Some(filter)) = &self.filter {
54 if filter.object_type != IcingaObjectType::Host
55 && filter.object_type != IcingaObjectType::Service
56 {
57 Err(crate::error::Error::FilterObjectTypeMismatch(
58 vec![IcingaObjectType::Host, IcingaObjectType::Service],
59 filter.object_type.to_owned(),
60 ))
61 } else {
62 Ok(())
63 }
64 } else {
65 Ok(())
66 }
67 }
68}
69
70impl RestApiEndpoint for RescheduleCheck {
71 type RequestBody = RescheduleCheck;
72
73 fn method(&self) -> Result<reqwest::Method, crate::error::Error> {
74 Ok(reqwest::Method::POST)
75 }
76
77 fn url(&self, base_url: &url::Url) -> Result<url::Url, crate::error::Error> {
78 base_url
79 .join("v1/actions/reschedule-check")
80 .map_err(crate::error::Error::CouldNotParseUrlFragment)
81 }
82
83 fn request_body(
84 &self,
85 ) -> Result<Option<std::borrow::Cow<Self::RequestBody>>, crate::error::Error>
86 where
87 Self::RequestBody: Clone + serde::Serialize + std::fmt::Debug,
88 {
89 Ok(Some(std::borrow::Cow::Borrowed(self)))
90 }
91}
92
93impl RestApiResponse<RescheduleCheck> for ResultsWrapper<StatusResponse> {}