remote_api/
time_off.rs

1use anyhow::Result;
2
3use crate::Client;
4#[derive(Clone, Debug)]
5pub struct TimeOff {
6    pub client: Client,
7}
8
9impl TimeOff {
10    #[doc(hidden)]
11    pub fn new(client: Client) -> Self {
12        Self { client }
13    }
14
15    #[doc = "List Time Off\n\nLists all Time Off records.\n\n**Parameters:**\n\n- `employment_id: Option<String>`: Only show time off for a specific employment\n- `order_by: Option<crate::types::OrderBy>`: Sort order\n- `page: Option<i64>`: Starts fetching records after the given page\n- `page_size: Option<i64>`: Change the amount of records returned per page, defaults to 20, limited to 100\n- `sort_by: Option<crate::types::SortBy>`: Field to sort by\n- `status: Option<crate::types::GetIndexTimeoffStatus>`: Filter time off by its status\n- `timeoff_type: Option<crate::types::TimeoffType>`: Filter time off by its type\n\n```rust,no_run\nasync fn example_time_off_get_index_timeoff() -> anyhow::Result<()> {\n    let client = remote_api::Client::new_from_env();\n    let result: remote_api::types::ListTimeoffResponse = client\n        .time_off()\n        .get_index_timeoff(\n            Some(\"some-string\".to_string()),\n            Some(remote_api::types::OrderBy::Desc),\n            Some(4 as i64),\n            Some(4 as i64),\n            Some(remote_api::types::SortBy::Status),\n            Some(remote_api::types::GetIndexTimeoffStatus::CancelRequested),\n            Some(remote_api::types::TimeoffType::MilitaryLeave),\n        )\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
16    #[tracing::instrument]
17    pub async fn get_index_timeoff<'a>(
18        &'a self,
19        employment_id: Option<String>,
20        order_by: Option<crate::types::OrderBy>,
21        page: Option<i64>,
22        page_size: Option<i64>,
23        sort_by: Option<crate::types::SortBy>,
24        status: Option<crate::types::GetIndexTimeoffStatus>,
25        timeoff_type: Option<crate::types::TimeoffType>,
26    ) -> Result<crate::types::ListTimeoffResponse, crate::types::error::Error> {
27        let mut req = self.client.client.request(
28            http::Method::GET,
29            format!("{}/{}", self.client.base_url, "v1/timeoff"),
30        );
31        req = req.bearer_auth(&self.client.token);
32        let mut query_params = vec![];
33        if let Some(p) = employment_id {
34            query_params.push(("employment_id", p));
35        }
36
37        if let Some(p) = order_by {
38            query_params.push(("order_by", format!("{}", p)));
39        }
40
41        if let Some(p) = page {
42            query_params.push(("page", format!("{}", p)));
43        }
44
45        if let Some(p) = page_size {
46            query_params.push(("page_size", format!("{}", p)));
47        }
48
49        if let Some(p) = sort_by {
50            query_params.push(("sort_by", format!("{}", p)));
51        }
52
53        if let Some(p) = status {
54            query_params.push(("status", format!("{}", p)));
55        }
56
57        if let Some(p) = timeoff_type {
58            query_params.push(("timeoff_type", format!("{}", p)));
59        }
60
61        req = req.query(&query_params);
62        let resp = req.send().await?;
63        let status = resp.status();
64        if status.is_success() {
65            let text = resp.text().await.unwrap_or_default();
66            serde_json::from_str(&text).map_err(|err| {
67                crate::types::error::Error::from_serde_error(
68                    format_serde_error::SerdeError::new(text.to_string(), err),
69                    status,
70                )
71            })
72        } else {
73            let text = resp.text().await.unwrap_or_default();
74            Err(crate::types::error::Error::Server {
75                body: text.to_string(),
76                status,
77            })
78        }
79    }
80
81    #[doc = "Create Time Off\n\nCreates a Time Off record\n\n```rust,no_run\nasync fn example_time_off_post_create_timeoff() -> anyhow::Result<()> {\n    let client = remote_api::Client::new_from_env();\n    let result: remote_api::types::TimeoffResponse = client\n        .time_off()\n        .post_create_timeoff(&remote_api::types::CreateApprovedTimeoffParams {\n            document: Some(remote_api::types::TimeoffDocumentParams {\n                content: \"some-string\".to_string(),\n                name: \"some-string\".to_string(),\n            }),\n            employment_id: \"some-string\".to_string(),\n            end_date: chrono::Utc::now().date_naive(),\n            notes: Some(\"some-string\".to_string()),\n            start_date: chrono::Utc::now().date_naive(),\n            timeoff_days: vec![remote_api::types::TimeoffDaysParams {\n                day: Some(chrono::Utc::now().date_naive()),\n                hours: Some(4 as i64),\n            }],\n            timeoff_type: remote_api::types::TimeoffType::MilitaryLeave,\n            timezone: \"some-string\".to_string(),\n            approved_at: Some(chrono::Utc::now()),\n            approver_id: Some(\"some-string\".to_string()),\n            status: Some(remote_api::types::CreateApprovedTimeoffParamsStatus::Approved),\n        })\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
82    #[tracing::instrument]
83    pub async fn post_create_timeoff<'a>(
84        &'a self,
85        body: &crate::types::CreateApprovedTimeoffParams,
86    ) -> Result<crate::types::TimeoffResponse, crate::types::error::Error> {
87        let mut req = self.client.client.request(
88            http::Method::POST,
89            format!("{}/{}", self.client.base_url, "v1/timeoff"),
90        );
91        req = req.bearer_auth(&self.client.token);
92        req = req.json(body);
93        let resp = req.send().await?;
94        let status = resp.status();
95        if status.is_success() {
96            let text = resp.text().await.unwrap_or_default();
97            serde_json::from_str(&text).map_err(|err| {
98                crate::types::error::Error::from_serde_error(
99                    format_serde_error::SerdeError::new(text.to_string(), err),
100                    status,
101                )
102            })
103        } else {
104            let text = resp.text().await.unwrap_or_default();
105            Err(crate::types::error::Error::Server {
106                body: text.to_string(),
107                status,
108            })
109        }
110    }
111
112    #[doc = "List Time Off Types\n\nLists all time off types that can be used for the \
113             `timeoff_type` parameter\n\n```rust,no_run\nasync fn \
114             example_time_off_get_timeoff_types_timeoff() -> anyhow::Result<()> {\n    let client \
115             = remote_api::Client::new_from_env();\n    let result: \
116             remote_api::types::ListTimeoffTypesResponse =\n        \
117             client.time_off().get_timeoff_types_timeoff().await?;\n    println!(\"{:?}\", \
118             result);\n    Ok(())\n}\n```"]
119    #[tracing::instrument]
120    pub async fn get_timeoff_types_timeoff<'a>(
121        &'a self,
122    ) -> Result<crate::types::ListTimeoffTypesResponse, crate::types::error::Error> {
123        let mut req = self.client.client.request(
124            http::Method::GET,
125            format!("{}/{}", self.client.base_url, "v1/timeoff/types"),
126        );
127        req = req.bearer_auth(&self.client.token);
128        let resp = req.send().await?;
129        let status = resp.status();
130        if status.is_success() {
131            let text = resp.text().await.unwrap_or_default();
132            serde_json::from_str(&text).map_err(|err| {
133                crate::types::error::Error::from_serde_error(
134                    format_serde_error::SerdeError::new(text.to_string(), err),
135                    status,
136                )
137            })
138        } else {
139            let text = resp.text().await.unwrap_or_default();
140            Err(crate::types::error::Error::Server {
141                body: text.to_string(),
142                status,
143            })
144        }
145    }
146
147    #[doc = "Show Time Off\n\nShows a single Time Off record\n\n**Parameters:**\n\n- `timeoff_id: \
148             &'astr`: Timeoff ID (required)\n\n```rust,no_run\nasync fn \
149             example_time_off_get_show_timeoff() -> anyhow::Result<()> {\n    let client = \
150             remote_api::Client::new_from_env();\n    let result: \
151             remote_api::types::TimeoffResponse =\n        \
152             client.time_off().get_show_timeoff(\"some-string\").await?;\n    println!(\"{:?}\", \
153             result);\n    Ok(())\n}\n```"]
154    #[tracing::instrument]
155    pub async fn get_show_timeoff<'a>(
156        &'a self,
157        timeoff_id: &'a str,
158    ) -> Result<crate::types::TimeoffResponse, crate::types::error::Error> {
159        let mut req = self.client.client.request(
160            http::Method::GET,
161            format!(
162                "{}/{}",
163                self.client.base_url,
164                "v1/timeoff/{id}".replace("{timeoff_id}", timeoff_id)
165            ),
166        );
167        req = req.bearer_auth(&self.client.token);
168        let resp = req.send().await?;
169        let status = resp.status();
170        if status.is_success() {
171            let text = resp.text().await.unwrap_or_default();
172            serde_json::from_str(&text).map_err(|err| {
173                crate::types::error::Error::from_serde_error(
174                    format_serde_error::SerdeError::new(text.to_string(), err),
175                    status,
176                )
177            })
178        } else {
179            let text = resp.text().await.unwrap_or_default();
180            Err(crate::types::error::Error::Server {
181                body: text.to_string(),
182                status,
183            })
184        }
185    }
186
187    #[doc = "Update Time Off\n\nUpdates a Time Off record. This endpoint can also be used for cancelling a time off.\n\n```rust,no_run\nasync fn example_time_off_patch_update_timeoff_2() -> anyhow::Result<()> {\n    let client = remote_api::Client::new_from_env();\n    let result: remote_api::types::TimeoffResponse = client\n        .time_off()\n        .patch_update_timeoff_2(&remote_api::types::UpdateApprovedTimeoffParams {\n            approved_at: Some(chrono::Utc::now()),\n            approver_id: Some(\"some-string\".to_string()),\n            cancel_reason: \"some-string\".to_string(),\n            document: Some(remote_api::types::TimeoffDocumentParams {\n                content: \"some-string\".to_string(),\n                name: \"some-string\".to_string(),\n            }),\n            edit_reason: \"some-string\".to_string(),\n            end_date: Some(chrono::Utc::now().date_naive()),\n            notes: Some(\"some-string\".to_string()),\n            start_date: Some(chrono::Utc::now().date_naive()),\n            status: Some(remote_api::types::UpdateApprovedTimeoffParamsStatus::Cancelled),\n            timeoff_days: Some(vec![remote_api::types::TimeoffDaysParams {\n                day: Some(chrono::Utc::now().date_naive()),\n                hours: Some(4 as i64),\n            }]),\n            timeoff_type: Some(remote_api::types::TimeoffType::MilitaryLeave),\n            timezone: Some(\"some-string\".to_string()),\n        })\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
188    #[tracing::instrument]
189    pub async fn patch_update_timeoff_2<'a>(
190        &'a self,
191        body: &crate::types::UpdateApprovedTimeoffParams,
192    ) -> Result<crate::types::TimeoffResponse, crate::types::error::Error> {
193        let mut req = self.client.client.request(
194            http::Method::PUT,
195            format!("{}/{}", self.client.base_url, "v1/timeoff/{id}"),
196        );
197        req = req.bearer_auth(&self.client.token);
198        req = req.json(body);
199        let resp = req.send().await?;
200        let status = resp.status();
201        if status.is_success() {
202            let text = resp.text().await.unwrap_or_default();
203            serde_json::from_str(&text).map_err(|err| {
204                crate::types::error::Error::from_serde_error(
205                    format_serde_error::SerdeError::new(text.to_string(), err),
206                    status,
207                )
208            })
209        } else {
210            let text = resp.text().await.unwrap_or_default();
211            Err(crate::types::error::Error::Server {
212                body: text.to_string(),
213                status,
214            })
215        }
216    }
217
218    #[doc = "Update Time Off\n\nUpdates a Time Off record. This endpoint can also be used for cancelling a time off.\n\n```rust,no_run\nasync fn example_time_off_patch_update_timeoff() -> anyhow::Result<()> {\n    let client = remote_api::Client::new_from_env();\n    let result: remote_api::types::TimeoffResponse = client\n        .time_off()\n        .patch_update_timeoff(&remote_api::types::UpdateApprovedTimeoffParams {\n            approved_at: Some(chrono::Utc::now()),\n            approver_id: Some(\"some-string\".to_string()),\n            cancel_reason: \"some-string\".to_string(),\n            document: Some(remote_api::types::TimeoffDocumentParams {\n                content: \"some-string\".to_string(),\n                name: \"some-string\".to_string(),\n            }),\n            edit_reason: \"some-string\".to_string(),\n            end_date: Some(chrono::Utc::now().date_naive()),\n            notes: Some(\"some-string\".to_string()),\n            start_date: Some(chrono::Utc::now().date_naive()),\n            status: Some(remote_api::types::UpdateApprovedTimeoffParamsStatus::Cancelled),\n            timeoff_days: Some(vec![remote_api::types::TimeoffDaysParams {\n                day: Some(chrono::Utc::now().date_naive()),\n                hours: Some(4 as i64),\n            }]),\n            timeoff_type: Some(remote_api::types::TimeoffType::MilitaryLeave),\n            timezone: Some(\"some-string\".to_string()),\n        })\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
219    #[tracing::instrument]
220    pub async fn patch_update_timeoff<'a>(
221        &'a self,
222        body: &crate::types::UpdateApprovedTimeoffParams,
223    ) -> Result<crate::types::TimeoffResponse, crate::types::error::Error> {
224        let mut req = self.client.client.request(
225            http::Method::PATCH,
226            format!("{}/{}", self.client.base_url, "v1/timeoff/{id}"),
227        );
228        req = req.bearer_auth(&self.client.token);
229        req = req.json(body);
230        let resp = req.send().await?;
231        let status = resp.status();
232        if status.is_success() {
233            let text = resp.text().await.unwrap_or_default();
234            serde_json::from_str(&text).map_err(|err| {
235                crate::types::error::Error::from_serde_error(
236                    format_serde_error::SerdeError::new(text.to_string(), err),
237                    status,
238                )
239            })
240        } else {
241            let text = resp.text().await.unwrap_or_default();
242            Err(crate::types::error::Error::Server {
243                body: text.to_string(),
244                status,
245            })
246        }
247    }
248}