1use pib_service_api_types::Pagination;
7use pib_service_core_types::{
8 AgendaItemId, BodyId, BodyPermissionId, MeetingId, OrganizationId, PersonId, UserId,
9};
10
11mod requests {
12 pub(super) use pib_client_requests::{
13 body::{
14 self,
15 by_id::{
16 meeting::{self, by_id::agenda_item},
17 organization, permission, person,
18 },
19 },
20 config, get, me, user,
21 };
22}
23mod types {
24 pub(super) use pib_service_api_types::{
25 body::{
26 self,
27 by_id::{
28 meeting::{self, by_id::agenda_item},
29 organization, permission, person,
30 },
31 },
32 config, get, me, user,
33 };
34}
35
36#[async_trait::async_trait(?Send)]
37pub trait PibClient: Clone {
38 type ClientError: std::error::Error;
39
40 async fn get(&self) -> Result<types::get::ResponseBody, Self::ClientError>;
41
42 async fn config_get(&self) -> Result<types::config::get::ResponseBody, Self::ClientError>;
43
44 async fn user_get(
45 &self,
46 pagination: Pagination,
47 ) -> Result<types::user::get::ResponseBody, Self::ClientError>;
48
49 async fn user_by_id_get(
50 &self,
51 user_id: UserId,
52 ) -> Result<types::user::by_id::get::ResponseBody, Self::ClientError>;
53
54 async fn body_get(
55 &self,
56 pagination: Pagination,
57 ) -> Result<types::body::get::ResponseBody, Self::ClientError>;
58
59 async fn body_post(
60 &self,
61 payload: types::body::post::RequestBody,
62 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError>;
63
64 async fn body_by_id_get(
65 &self,
66 body_id: BodyId,
67 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError>;
68
69 async fn body_by_id_permission_get(
70 &self,
71 body_id: BodyId,
72 pagination: Pagination,
73 ) -> Result<types::permission::get::ResponseBody, Self::ClientError>;
74
75 async fn body_by_id_permission_post(
76 &self,
77 body_id: BodyId,
78 payload: types::permission::post::RequestBody,
79 ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError>;
80
81 async fn body_by_id_permission_by_id_get(
82 &self,
83 body_id: BodyId,
84 permission_id: BodyPermissionId,
85 ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError>;
86
87 async fn body_by_id_meeting_get(
88 &self,
89 body_id: BodyId,
90 pagination: Pagination,
91 ) -> Result<types::meeting::get::ResponseBody, Self::ClientError>;
92
93 async fn body_by_id_meeting_post(
94 &self,
95 body_id: BodyId,
96 payload: types::meeting::post::RequestBody,
97 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError>;
98
99 async fn body_by_id_meeting_by_id_get(
100 &self,
101 body_id: BodyId,
102 meeting_id: MeetingId,
103 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError>;
104
105 async fn body_by_id_meeting_by_id_agenda_item_get(
106 &self,
107 body_id: BodyId,
108 meeting_id: MeetingId,
109 pagination: Pagination,
110 ) -> Result<types::agenda_item::get::ResponseBody, Self::ClientError>;
111
112 async fn body_by_id_meeting_by_id_agenda_item_post(
113 &self,
114 body_id: BodyId,
115 meeting_id: MeetingId,
116 payload: types::meeting::by_id::agenda_item::post::RequestBody,
117 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError>;
118
119 async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
120 &self,
121 body_id: BodyId,
122 meeting_id: MeetingId,
123 agenda_item_id: AgendaItemId,
124 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError>;
125
126 async fn body_by_id_organization_get(
127 &self,
128 body_id: BodyId,
129 pagination: Pagination,
130 ) -> Result<types::organization::get::ResponseBody, Self::ClientError>;
131
132 async fn body_by_id_organization_post(
133 &self,
134 body_id: BodyId,
135 payload: types::organization::post::RequestBody,
136 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError>;
137
138 async fn body_by_id_organization_by_id_get(
139 &self,
140 body_id: BodyId,
141 organization_id: OrganizationId,
142 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError>;
143
144 async fn body_by_id_person_get(
145 &self,
146 body_id: BodyId,
147 pagination: Pagination,
148 ) -> Result<types::person::get::ResponseBody, Self::ClientError>;
149
150 async fn body_by_id_person_post(
151 &self,
152 body_id: BodyId,
153 payload: types::person::post::RequestBody,
154 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError>;
155
156 async fn body_by_id_person_by_id_get(
157 &self,
158 body_id: BodyId,
159 person_id: PersonId,
160 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError>;
161
162 async fn me_profile_get(
163 &self,
164 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError>;
165
166 async fn me_profile_patch(
167 &self,
168 payload: types::me::profile::patch::RequestBody,
169 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError>;
170}
171
172#[async_trait::async_trait(?Send)]
173impl<C: http_request_derive_client::Client + Clone> PibClient for C {
174 type ClientError = C::ClientError;
175
176 async fn get(&self) -> Result<types::get::ResponseBody, Self::ClientError> {
177 let response = self.execute(requests::get::Request).await?;
178 Ok(response.0)
179 }
180
181 async fn config_get(&self) -> Result<types::config::get::ResponseBody, Self::ClientError> {
182 let response = self.execute(requests::config::get::Request).await?;
183 Ok(response.0)
184 }
185
186 async fn user_get(
187 &self,
188 pagination: Pagination,
189 ) -> Result<types::user::get::ResponseBody, Self::ClientError> {
190 let response = self
191 .execute(requests::user::get::Request { pagination })
192 .await?;
193 Ok(response.0)
194 }
195
196 async fn user_by_id_get(
197 &self,
198 user_id: UserId,
199 ) -> Result<types::user::by_id::get::ResponseBody, Self::ClientError> {
200 let response = self
201 .execute(requests::user::by_id::get::Request { user_id })
202 .await?;
203 Ok(response.0)
204 }
205
206 async fn body_get(
207 &self,
208 pagination: Pagination,
209 ) -> Result<types::body::get::ResponseBody, Self::ClientError> {
210 let response = self
211 .execute(requests::body::get::Request { pagination })
212 .await?;
213 Ok(response.0)
214 }
215
216 async fn body_post(
217 &self,
218 payload: types::body::post::RequestBody,
219 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError> {
220 Ok(self
221 .execute(requests::body::post::Request { payload })
222 .await?
223 .0)
224 }
225
226 async fn body_by_id_get(
227 &self,
228 body_id: BodyId,
229 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError> {
230 let response = self
231 .execute(requests::body::by_id::get::Request { body_id })
232 .await?;
233 Ok(response.0)
234 }
235
236 async fn body_by_id_permission_get(
237 &self,
238 body_id: BodyId,
239 pagination: Pagination,
240 ) -> Result<types::permission::get::ResponseBody, Self::ClientError> {
241 Ok(self
242 .execute(requests::permission::get::Request {
243 body_id,
244 pagination,
245 })
246 .await?
247 .0)
248 }
249
250 async fn body_by_id_permission_post(
251 &self,
252 body_id: BodyId,
253 payload: types::permission::post::RequestBody,
254 ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError> {
255 Ok(self
256 .execute(requests::permission::post::Request { body_id, payload })
257 .await?
258 .0)
259 }
260
261 async fn body_by_id_permission_by_id_get(
262 &self,
263 body_id: BodyId,
264 permission_id: BodyPermissionId,
265 ) -> Result<types::permission::by_id::get::ResponseBody, Self::ClientError> {
266 let response = self
267 .execute(requests::permission::by_id::get::Request {
268 body_id,
269 permission_id,
270 })
271 .await?;
272 Ok(response.0)
273 }
274
275 async fn body_by_id_meeting_get(
276 &self,
277 body_id: BodyId,
278 pagination: Pagination,
279 ) -> Result<types::meeting::get::ResponseBody, Self::ClientError> {
280 Ok(self
281 .execute(requests::meeting::get::Request {
282 body_id,
283 pagination,
284 })
285 .await?
286 .0)
287 }
288
289 async fn body_by_id_meeting_post(
290 &self,
291 body_id: BodyId,
292 payload: types::meeting::post::RequestBody,
293 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError> {
294 Ok(self
295 .execute(requests::meeting::post::Request { body_id, payload })
296 .await?
297 .0)
298 }
299
300 async fn body_by_id_meeting_by_id_get(
301 &self,
302 body_id: BodyId,
303 meeting_id: MeetingId,
304 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError> {
305 let response = self
306 .execute(requests::meeting::by_id::get::Request {
307 body_id,
308 meeting_id,
309 })
310 .await?;
311 Ok(response.0)
312 }
313
314 async fn body_by_id_meeting_by_id_agenda_item_get(
315 &self,
316 body_id: BodyId,
317 meeting_id: MeetingId,
318 pagination: Pagination,
319 ) -> Result<types::agenda_item::get::ResponseBody, Self::ClientError> {
320 let response = self
321 .execute(requests::agenda_item::get::Request {
322 body_id,
323 meeting_id,
324 pagination,
325 })
326 .await?;
327 Ok(response.0)
328 }
329
330 async fn body_by_id_meeting_by_id_agenda_item_post(
331 &self,
332 body_id: BodyId,
333 meeting_id: MeetingId,
334 payload: types::agenda_item::post::RequestBody,
335 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError> {
336 Ok(self
337 .execute(requests::agenda_item::post::Request {
338 body_id,
339 meeting_id,
340 payload,
341 })
342 .await?
343 .0)
344 }
345
346 async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
347 &self,
348 body_id: BodyId,
349 meeting_id: MeetingId,
350 agenda_item_id: AgendaItemId,
351 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError> {
352 let response = self
353 .execute(requests::agenda_item::by_id::get::Request {
354 body_id,
355 meeting_id,
356 agenda_item_id,
357 })
358 .await?;
359 Ok(response.0)
360 }
361
362 async fn body_by_id_organization_get(
363 &self,
364 body_id: BodyId,
365 pagination: Pagination,
366 ) -> Result<types::organization::get::ResponseBody, Self::ClientError> {
367 Ok(self
368 .execute(requests::organization::get::Request {
369 body_id,
370 pagination,
371 })
372 .await?
373 .0)
374 }
375
376 async fn body_by_id_organization_post(
377 &self,
378 body_id: BodyId,
379 payload: types::organization::post::RequestBody,
380 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError> {
381 Ok(self
382 .execute(requests::organization::post::Request { body_id, payload })
383 .await?
384 .0)
385 }
386
387 async fn body_by_id_organization_by_id_get(
388 &self,
389 body_id: BodyId,
390 organization_id: OrganizationId,
391 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError> {
392 let response = self
393 .execute(requests::organization::by_id::get::Request {
394 body_id,
395 organization_id,
396 })
397 .await?;
398 Ok(response.0)
399 }
400
401 async fn body_by_id_person_get(
402 &self,
403 body_id: BodyId,
404 pagination: Pagination,
405 ) -> Result<types::person::get::ResponseBody, Self::ClientError> {
406 Ok(self
407 .execute(requests::person::get::Request {
408 body_id,
409 pagination,
410 })
411 .await?
412 .0)
413 }
414
415 async fn body_by_id_person_post(
416 &self,
417 body_id: BodyId,
418 payload: types::person::post::RequestBody,
419 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError> {
420 Ok(self
421 .execute(requests::person::post::Request { body_id, payload })
422 .await?
423 .0)
424 }
425
426 async fn body_by_id_person_by_id_get(
427 &self,
428 body_id: BodyId,
429 person_id: PersonId,
430 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError> {
431 let response = self
432 .execute(requests::person::by_id::get::Request { body_id, person_id })
433 .await?;
434 Ok(response.0)
435 }
436
437 async fn me_profile_get(
438 &self,
439 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError> {
440 Ok(self.execute(requests::me::profile::get::Request).await?.0)
441 }
442
443 async fn me_profile_patch(
444 &self,
445 payload: types::me::profile::patch::RequestBody,
446 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError> {
447 Ok(self
448 .execute(requests::me::profile::patch::Request { payload })
449 .await?
450 .0)
451 }
452}