front_api/
shifts.rs

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}