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}