1use anyhow::Result;
2
3use crate::Client;
4#[derive(Clone, Debug)]
5pub struct Shifts {
6 pub client: Client,
7}
8
9impl Shifts {
10 #[doc(hidden)]
11 pub fn new(client: Client) -> Self {
12 Self { client }
13 }
14
15 #[doc = "List Shifts\n\nList the shifts.\n\n```rust,no_run\nasync fn example_shifts_list() -> \
16 anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n let \
17 result: front_api::types::ListShiftsResponse = client.shifts().list().await?;\n \
18 println!(\"{:?}\", result);\n Ok(())\n}\n```"]
19 #[tracing::instrument]
20 pub async fn list<'a>(
21 &'a self,
22 ) -> Result<crate::types::ListShiftsResponse, crate::types::error::Error> {
23 let mut req = self.client.client.request(
24 http::Method::GET,
25 &format!("{}/{}", self.client.base_url, "shifts"),
26 );
27 req = req.bearer_auth(&self.client.token);
28 let resp = req.send().await?;
29 let status = resp.status();
30 if status.is_success() {
31 let text = resp.text().await.unwrap_or_default();
32 serde_json::from_str(&text).map_err(|err| {
33 crate::types::error::Error::from_serde_error(
34 format_serde_error::SerdeError::new(text.to_string(), err),
35 status,
36 )
37 })
38 } else {
39 Err(crate::types::error::Error::UnexpectedResponse(resp))
40 }
41 }
42
43 #[doc = "Create shift\n\nCreate a shift.\n\n```rust,no_run\nasync fn example_shifts_create() -> anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n let result: front_api::types::ShiftResponse = client\n .shifts()\n .create(&serde_json::Value::String(\"some-string\".to_string()))\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n```"]
44 #[tracing::instrument]
45 pub async fn create<'a>(
46 &'a self,
47 body: &crate::types::CreateShift,
48 ) -> Result<crate::types::ShiftResponse, crate::types::error::Error> {
49 let mut req = self.client.client.request(
50 http::Method::POST,
51 &format!("{}/{}", self.client.base_url, "shifts"),
52 );
53 req = req.bearer_auth(&self.client.token);
54 req = req.json(body);
55 let resp = req.send().await?;
56 let status = resp.status();
57 if status.is_success() {
58 let text = resp.text().await.unwrap_or_default();
59 serde_json::from_str(&text).map_err(|err| {
60 crate::types::error::Error::from_serde_error(
61 format_serde_error::SerdeError::new(text.to_string(), err),
62 status,
63 )
64 })
65 } else {
66 Err(crate::types::error::Error::UnexpectedResponse(resp))
67 }
68 }
69
70 #[doc = "List team Shifts\n\nList the shifts for a team.\n\n**Parameters:**\n\n- `team_id: &'astr`: The team ID (required)\n\n```rust,no_run\nasync fn example_shifts_list_team() -> anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n let result: front_api::types::ListTeamShiftsResponse =\n client.shifts().list_team(\"some-string\").await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n```"]
71 #[tracing::instrument]
72 pub async fn list_team<'a>(
73 &'a self,
74 team_id: &'a str,
75 ) -> Result<crate::types::ListTeamShiftsResponse, crate::types::error::Error> {
76 let mut req = self.client.client.request(
77 http::Method::GET,
78 &format!(
79 "{}/{}",
80 self.client.base_url,
81 "teams/{team_id}/shifts".replace("{team_id}", team_id)
82 ),
83 );
84 req = req.bearer_auth(&self.client.token);
85 let resp = req.send().await?;
86 let status = resp.status();
87 if status.is_success() {
88 let text = resp.text().await.unwrap_or_default();
89 serde_json::from_str(&text).map_err(|err| {
90 crate::types::error::Error::from_serde_error(
91 format_serde_error::SerdeError::new(text.to_string(), err),
92 status,
93 )
94 })
95 } else {
96 Err(crate::types::error::Error::UnexpectedResponse(resp))
97 }
98 }
99
100 #[doc = "Create team shift\n\nCreate a shift for a team.\n\n**Parameters:**\n\n- `team_id: &'astr`: The Team ID (required)\n\n```rust,no_run\nasync fn example_shifts_create_team() -> anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n let result: front_api::types::ShiftResponse = client\n .shifts()\n .create_team(\n \"some-string\",\n &serde_json::Value::String(\"some-string\".to_string()),\n )\n .await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n```"]
101 #[tracing::instrument]
102 pub async fn create_team<'a>(
103 &'a self,
104 team_id: &'a str,
105 body: &crate::types::CreateShift,
106 ) -> Result<crate::types::ShiftResponse, crate::types::error::Error> {
107 let mut req = self.client.client.request(
108 http::Method::POST,
109 &format!(
110 "{}/{}",
111 self.client.base_url,
112 "teams/{team_id}/shifts".replace("{team_id}", team_id)
113 ),
114 );
115 req = req.bearer_auth(&self.client.token);
116 req = req.json(body);
117 let resp = req.send().await?;
118 let status = resp.status();
119 if status.is_success() {
120 let text = resp.text().await.unwrap_or_default();
121 serde_json::from_str(&text).map_err(|err| {
122 crate::types::error::Error::from_serde_error(
123 format_serde_error::SerdeError::new(text.to_string(), err),
124 status,
125 )
126 })
127 } else {
128 Err(crate::types::error::Error::UnexpectedResponse(resp))
129 }
130 }
131
132 #[doc = "List Teammate Shifts\n\nLists all the shifts for the \
133 teammate.\n\n**Parameters:**\n\n- `teammate_id: &'astr`: The teammate ID \
134 (required)\n\n```rust,no_run\nasync fn example_shifts_list_teammate() -> \
135 anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n let \
136 result: front_api::types::ListTeammateShiftsResponse =\n \
137 client.shifts().list_teammate(\"some-string\").await?;\n println!(\"{:?}\", \
138 result);\n Ok(())\n}\n```"]
139 #[tracing::instrument]
140 pub async fn list_teammate<'a>(
141 &'a self,
142 teammate_id: &'a str,
143 ) -> Result<crate::types::ListTeammateShiftsResponse, crate::types::error::Error> {
144 let mut req = self.client.client.request(
145 http::Method::GET,
146 &format!(
147 "{}/{}",
148 self.client.base_url,
149 "teammates/{teammate_id}/shifts".replace("{teammate_id}", teammate_id)
150 ),
151 );
152 req = req.bearer_auth(&self.client.token);
153 let resp = req.send().await?;
154 let status = resp.status();
155 if status.is_success() {
156 let text = resp.text().await.unwrap_or_default();
157 serde_json::from_str(&text).map_err(|err| {
158 crate::types::error::Error::from_serde_error(
159 format_serde_error::SerdeError::new(text.to_string(), err),
160 status,
161 )
162 })
163 } else {
164 Err(crate::types::error::Error::UnexpectedResponse(resp))
165 }
166 }
167
168 #[doc = "Get shift\n\nFetch a shift.\n\n**Parameters:**\n\n- `shift_id: &'astr`: The Shift ID (required)\n\n```rust,no_run\nasync fn example_shifts_get() -> anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n let result: front_api::types::ShiftResponse = client.shifts().get(\"some-string\").await?;\n println!(\"{:?}\", result);\n Ok(())\n}\n```"]
169 #[tracing::instrument]
170 pub async fn get<'a>(
171 &'a self,
172 shift_id: &'a str,
173 ) -> Result<crate::types::ShiftResponse, crate::types::error::Error> {
174 let mut req = self.client.client.request(
175 http::Method::GET,
176 &format!(
177 "{}/{}",
178 self.client.base_url,
179 "shift/{shift_id}".replace("{shift_id}", shift_id)
180 ),
181 );
182 req = req.bearer_auth(&self.client.token);
183 let resp = req.send().await?;
184 let status = resp.status();
185 if status.is_success() {
186 let text = resp.text().await.unwrap_or_default();
187 serde_json::from_str(&text).map_err(|err| {
188 crate::types::error::Error::from_serde_error(
189 format_serde_error::SerdeError::new(text.to_string(), err),
190 status,
191 )
192 })
193 } else {
194 Err(crate::types::error::Error::UnexpectedResponse(resp))
195 }
196 }
197
198 #[doc = "List shift's teammates\n\nList the teammates assigned to a \
199 shift.\n\n**Parameters:**\n\n- `shift_id: &'astr`: The Shift ID \
200 (required)\n\n```rust,no_run\nasync fn example_shifts_list_teammates() -> \
201 anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n let \
202 result: front_api::types::ListShiftTeammatesResponse =\n \
203 client.shifts().list_teammates(\"some-string\").await?;\n println!(\"{:?}\", \
204 result);\n Ok(())\n}\n```"]
205 #[tracing::instrument]
206 pub async fn list_teammates<'a>(
207 &'a self,
208 shift_id: &'a str,
209 ) -> Result<crate::types::ListShiftTeammatesResponse, crate::types::error::Error> {
210 let mut req = self.client.client.request(
211 http::Method::GET,
212 &format!(
213 "{}/{}",
214 self.client.base_url,
215 "shift/{shift_id}/teammates".replace("{shift_id}", shift_id)
216 ),
217 );
218 req = req.bearer_auth(&self.client.token);
219 let resp = req.send().await?;
220 let status = resp.status();
221 if status.is_success() {
222 let text = resp.text().await.unwrap_or_default();
223 serde_json::from_str(&text).map_err(|err| {
224 crate::types::error::Error::from_serde_error(
225 format_serde_error::SerdeError::new(text.to_string(), err),
226 status,
227 )
228 })
229 } else {
230 Err(crate::types::error::Error::UnexpectedResponse(resp))
231 }
232 }
233
234 #[doc = "Add teammates to shift\n\nAdd teammates to a shift. The selected teammates must be in the team that owns the shift.\n\n**Parameters:**\n\n- `shift_id: &'astr`: The Shift ID (required)\n\n```rust,no_run\nasync fn example_shifts_add_teammates_to() -> anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n client\n .shifts()\n .add_teammates_to(\n \"some-string\",\n &front_api::types::TeammateIds {\n teammate_ids: vec![\"some-string\".to_string()],\n },\n )\n .await?;\n Ok(())\n}\n```"]
235 #[tracing::instrument]
236 pub async fn add_teammates_to<'a>(
237 &'a self,
238 shift_id: &'a str,
239 body: &crate::types::TeammateIds,
240 ) -> Result<(), crate::types::error::Error> {
241 let mut req = self.client.client.request(
242 http::Method::POST,
243 &format!(
244 "{}/{}",
245 self.client.base_url,
246 "shift/{shift_id}/teammates".replace("{shift_id}", shift_id)
247 ),
248 );
249 req = req.bearer_auth(&self.client.token);
250 req = req.json(body);
251 let resp = req.send().await?;
252 let status = resp.status();
253 if status.is_success() {
254 Ok(())
255 } else {
256 Err(crate::types::error::Error::UnexpectedResponse(resp))
257 }
258 }
259
260 #[doc = "Remove teammates from shift\n\nRemove teammates from a shift.\n\n**Parameters:**\n\n- \
261 `shift_id: &'astr`: The Shift ID (required)\n\n```rust,no_run\nasync fn \
262 example_shifts_remove_teammates_from() -> anyhow::Result<()> {\n let client = \
263 front_api::Client::new_from_env();\n client\n .shifts()\n \
264 .remove_teammates_from(\n \"some-string\",\n \
265 &front_api::types::TeammateIds {\n teammate_ids: \
266 vec![\"some-string\".to_string()],\n },\n )\n .await?;\n \
267 Ok(())\n}\n```"]
268 #[tracing::instrument]
269 pub async fn remove_teammates_from<'a>(
270 &'a self,
271 shift_id: &'a str,
272 body: &crate::types::TeammateIds,
273 ) -> Result<(), crate::types::error::Error> {
274 let mut req = self.client.client.request(
275 http::Method::DELETE,
276 &format!(
277 "{}/{}",
278 self.client.base_url,
279 "shift/{shift_id}/teammates".replace("{shift_id}", shift_id)
280 ),
281 );
282 req = req.bearer_auth(&self.client.token);
283 req = req.json(body);
284 let resp = req.send().await?;
285 let status = resp.status();
286 if status.is_success() {
287 Ok(())
288 } else {
289 Err(crate::types::error::Error::UnexpectedResponse(resp))
290 }
291 }
292
293 #[doc = "Update shift\n\nUpdate a shift.\n\n**Parameters:**\n\n- `shift_id: &'astr`: The Shift ID (required)\n\n```rust,no_run\nasync fn example_shifts_update() -> anyhow::Result<()> {\n let client = front_api::Client::new_from_env();\n client\n .shifts()\n .update(\n \"some-string\",\n &front_api::types::UpdateShift {\n name: Some(\"some-string\".to_string()),\n color: Some(front_api::types::Color::Red),\n timezone: Some(\"some-string\".to_string()),\n times: Some(front_api::types::ShiftIntervals {\n mon: Some(front_api::types::ShiftInterval {\n start: \"some-string\".to_string(),\n end: \"some-string\".to_string(),\n }),\n tue: Some(front_api::types::ShiftInterval {\n start: \"some-string\".to_string(),\n end: \"some-string\".to_string(),\n }),\n wed: Some(front_api::types::ShiftInterval {\n start: \"some-string\".to_string(),\n end: \"some-string\".to_string(),\n }),\n thu: Some(front_api::types::ShiftInterval {\n start: \"some-string\".to_string(),\n end: \"some-string\".to_string(),\n }),\n fri: Some(front_api::types::ShiftInterval {\n start: \"some-string\".to_string(),\n end: \"some-string\".to_string(),\n }),\n sat: Some(front_api::types::ShiftInterval {\n start: \"some-string\".to_string(),\n end: \"some-string\".to_string(),\n }),\n sun: Some(front_api::types::ShiftInterval {\n start: \"some-string\".to_string(),\n end: \"some-string\".to_string(),\n }),\n }),\n teammate_ids: Some(vec![\"some-string\".to_string()]),\n },\n )\n .await?;\n Ok(())\n}\n```"]
294 #[tracing::instrument]
295 pub async fn update<'a>(
296 &'a self,
297 shift_id: &'a str,
298 body: &crate::types::UpdateShift,
299 ) -> Result<(), crate::types::error::Error> {
300 let mut req = self.client.client.request(
301 http::Method::PATCH,
302 &format!(
303 "{}/{}",
304 self.client.base_url,
305 "shifts/{shift_id}".replace("{shift_id}", shift_id)
306 ),
307 );
308 req = req.bearer_auth(&self.client.token);
309 req = req.json(body);
310 let resp = req.send().await?;
311 let status = resp.status();
312 if status.is_success() {
313 Ok(())
314 } else {
315 Err(crate::types::error::Error::UnexpectedResponse(resp))
316 }
317 }
318}