1use pib_service_api_types::{
7 Index, Pagination,
8 body::{
9 Body, NewBody,
10 by_id::{
11 meeting::{
12 Meeting, NewMeeting,
13 by_id::agenda_item::{AgendaItem, NewAgendaItem, UpdateAgendaItem},
14 },
15 membership::{self, Membership, NewMembership, UpdateMembership},
16 organization::{self, NewOrganization, Organization},
17 permission::{NewPermission, Permission},
18 person::{self, NewPerson, Person},
19 },
20 },
21 config::Config,
22 me::profile::{Profile, UpdateProfile},
23 user::User,
24};
25use pib_service_core_types::{
26 AgendaItemId, BodyId, BodyPermissionId, DataPage, MeetingId, MembershipId, OrganizationId,
27 PersonId, UserId,
28};
29
30mod requests {
31 pub(super) use pib_client_requests::{
32 body::{
33 self,
34 by_id::{
35 meeting::{self, by_id::agenda_item},
36 membership, organization, permission, person,
37 },
38 },
39 config, get, me, user,
40 };
41}
42
43mod types {
44 pub(super) use pib_service_api_types::{
45 body::{
46 self,
47 by_id::{
48 meeting::{self, by_id::agenda_item},
49 organization, permission, person,
50 },
51 },
52 me, user,
53 };
54}
55
56#[async_trait::async_trait(?Send)]
57pub trait PibClient: Clone {
58 type ClientError: std::error::Error;
59
60 async fn get(&self) -> Result<Index, Self::ClientError>;
61
62 async fn config_get(&self) -> Result<Config, Self::ClientError>;
63
64 async fn user_get(&self, pagination: Pagination) -> Result<DataPage<User>, Self::ClientError>;
65
66 async fn user_by_id_get(&self, user_id: UserId) -> Result<User, Self::ClientError>;
67
68 async fn body_get(&self, pagination: Pagination) -> Result<DataPage<Body>, Self::ClientError>;
69
70 async fn body_post(&self, new_body: NewBody) -> Result<Body, Self::ClientError>;
71
72 async fn body_by_id_get(&self, body_id: BodyId) -> Result<Body, Self::ClientError>;
73
74 async fn body_by_id_permission_get(
75 &self,
76 body_id: BodyId,
77 pagination: Pagination,
78 ) -> Result<DataPage<Permission>, Self::ClientError>;
79
80 async fn body_by_id_permission_post(
81 &self,
82 body_id: BodyId,
83 new_permission: NewPermission,
84 ) -> Result<Permission, Self::ClientError>;
85
86 async fn body_by_id_permission_by_id_get(
87 &self,
88 body_id: BodyId,
89 permission_id: BodyPermissionId,
90 ) -> Result<Permission, Self::ClientError>;
91
92 async fn body_by_id_meeting_get(
93 &self,
94 body_id: BodyId,
95 pagination: Pagination,
96 ) -> Result<DataPage<Meeting>, Self::ClientError>;
97
98 async fn body_by_id_meeting_post(
99 &self,
100 body_id: BodyId,
101 new_meeting: NewMeeting,
102 ) -> Result<Meeting, Self::ClientError>;
103
104 async fn body_by_id_meeting_by_id_get(
105 &self,
106 body_id: BodyId,
107 meeting_id: MeetingId,
108 ) -> Result<Meeting, Self::ClientError>;
109
110 async fn body_by_id_meeting_by_id_agenda_item_get(
111 &self,
112 body_id: BodyId,
113 meeting_id: MeetingId,
114 pagination: Pagination,
115 ) -> Result<DataPage<AgendaItem>, Self::ClientError>;
116
117 async fn body_by_id_meeting_by_id_agenda_item_post(
118 &self,
119 body_id: BodyId,
120 meeting_id: MeetingId,
121 new_agenda_item: NewAgendaItem,
122 ) -> Result<AgendaItem, Self::ClientError>;
123
124 async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
125 &self,
126 body_id: BodyId,
127 meeting_id: MeetingId,
128 agenda_item_id: AgendaItemId,
129 ) -> Result<AgendaItem, Self::ClientError>;
130
131 async fn body_by_id_meeting_by_id_agenda_item_by_id_patch(
132 &self,
133 body_id: BodyId,
134 meeting_id: MeetingId,
135 agenda_item_id: AgendaItemId,
136 update_agenda_item: UpdateAgendaItem,
137 ) -> Result<types::agenda_item::AgendaItem, Self::ClientError>;
138
139 async fn body_by_id_organization_get(
140 &self,
141 body_id: BodyId,
142 pagination: Pagination,
143 ) -> Result<DataPage<Organization>, Self::ClientError>;
144
145 async fn body_by_id_organization_post(
146 &self,
147 body_id: BodyId,
148 payload: NewOrganization,
149 ) -> Result<Organization, Self::ClientError>;
150
151 async fn body_by_id_organization_by_id_get(
152 &self,
153 body_id: BodyId,
154 organization_id: OrganizationId,
155 ) -> Result<Organization, Self::ClientError>;
156
157 async fn body_by_id_organization_by_id_membership_get(
158 &self,
159 body_id: BodyId,
160 organization_id: OrganizationId,
161 pagination: Pagination,
162 ) -> Result<DataPage<Membership>, Self::ClientError>;
163
164 async fn body_by_id_organization_by_id_membership_post(
165 &self,
166 body_id: BodyId,
167 organization_id: OrganizationId,
168 new_membership: organization::by_id::membership::NewMembership,
169 ) -> Result<Membership, Self::ClientError>;
170
171 async fn body_by_id_organization_by_id_membership_by_id_get(
172 &self,
173 body_id: BodyId,
174 organization_id: OrganizationId,
175 membership_id: MembershipId,
176 ) -> Result<Membership, Self::ClientError>;
177
178 async fn body_by_id_organization_by_id_membership_by_id_patch(
179 &self,
180 body_id: BodyId,
181 organization_id: OrganizationId,
182 membership_id: MembershipId,
183 update_membership: UpdateMembership,
184 ) -> Result<Membership, Self::ClientError>;
185
186 async fn body_by_id_person_get(
187 &self,
188 body_id: BodyId,
189 pagination: Pagination,
190 ) -> Result<DataPage<Person>, Self::ClientError>;
191
192 async fn body_by_id_person_post(
193 &self,
194 body_id: BodyId,
195 new_person: NewPerson,
196 ) -> Result<Person, Self::ClientError>;
197
198 async fn body_by_id_person_by_id_get(
199 &self,
200 body_id: BodyId,
201 person_id: PersonId,
202 ) -> Result<Person, Self::ClientError>;
203
204 async fn body_by_id_person_by_id_membership_get(
205 &self,
206 body_id: BodyId,
207 person_id: PersonId,
208 pagination: Pagination,
209 ) -> Result<DataPage<Membership>, Self::ClientError>;
210
211 async fn body_by_id_person_by_id_membership_post(
212 &self,
213 body_id: BodyId,
214 person_id: PersonId,
215 new_membership: person::by_id::membership::NewMembership,
216 ) -> Result<Membership, Self::ClientError>;
217
218 async fn body_by_id_person_by_id_membership_by_id_get(
219 &self,
220 body_id: BodyId,
221 person_id: PersonId,
222 membership_id: MembershipId,
223 ) -> Result<Membership, Self::ClientError>;
224
225 async fn body_by_id_person_by_id_membership_by_id_patch(
226 &self,
227 body_id: BodyId,
228 person_id: PersonId,
229 membership_id: MembershipId,
230 update_membership: UpdateMembership,
231 ) -> Result<Membership, Self::ClientError>;
232
233 async fn body_by_id_membership_get(
234 &self,
235 body_id: BodyId,
236 pagination: Pagination,
237 ) -> Result<DataPage<Membership>, Self::ClientError>;
238
239 async fn body_by_id_membership_post(
240 &self,
241 body_id: BodyId,
242 new_membership: NewMembership,
243 ) -> Result<Membership, Self::ClientError>;
244
245 async fn body_by_id_membership_by_id_get(
246 &self,
247 body_id: BodyId,
248 membership_id: MembershipId,
249 ) -> Result<Membership, Self::ClientError>;
250
251 async fn body_by_id_membership_by_id_patch(
252 &self,
253 body_id: BodyId,
254 membership_id: MembershipId,
255 update_membership: UpdateMembership,
256 ) -> Result<Membership, Self::ClientError>;
257
258 async fn me_profile_get(&self) -> Result<Profile, Self::ClientError>;
259
260 async fn me_profile_patch(
261 &self,
262 update_profile: UpdateProfile,
263 ) -> Result<Profile, Self::ClientError>;
264}
265
266#[async_trait::async_trait(?Send)]
267impl<C: http_request_derive_client::Client + Clone> PibClient for C {
268 type ClientError = C::ClientError;
269
270 async fn get(&self) -> Result<Index, Self::ClientError> {
271 let response = self.execute(requests::get::Request).await?;
272 Ok(response.0.0)
273 }
274
275 async fn config_get(&self) -> Result<Config, Self::ClientError> {
276 let response = self.execute(requests::config::get::Request).await?;
277 Ok(response.0.0)
278 }
279
280 async fn user_get(
281 &self,
282 pagination: Pagination,
283 ) -> Result<DataPage<types::user::User>, Self::ClientError> {
284 let response = self
285 .execute(requests::user::get::Request { pagination })
286 .await?;
287 Ok(response.0.0)
288 }
289
290 async fn user_by_id_get(
291 &self,
292 user_id: UserId,
293 ) -> Result<types::user::User, Self::ClientError> {
294 let response = self
295 .execute(requests::user::by_id::get::Request { user_id })
296 .await?;
297 Ok(response.0.0)
298 }
299
300 async fn body_get(
301 &self,
302 pagination: Pagination,
303 ) -> Result<DataPage<types::body::Body>, Self::ClientError> {
304 let response = self
305 .execute(requests::body::get::Request { pagination })
306 .await?;
307 Ok(response.0.0)
308 }
309
310 async fn body_post(
311 &self,
312 new_body: types::body::NewBody,
313 ) -> Result<types::body::Body, Self::ClientError> {
314 Ok(self
315 .execute(requests::body::post::Request {
316 payload: types::body::post::RequestBody(new_body),
317 })
318 .await?
319 .0
320 .0)
321 }
322
323 async fn body_by_id_get(
324 &self,
325 body_id: BodyId,
326 ) -> Result<types::body::Body, Self::ClientError> {
327 let response = self
328 .execute(requests::body::by_id::get::Request { body_id })
329 .await?;
330 Ok(response.0.0)
331 }
332
333 async fn body_by_id_permission_get(
334 &self,
335 body_id: BodyId,
336 pagination: Pagination,
337 ) -> Result<DataPage<Permission>, Self::ClientError> {
338 Ok(self
339 .execute(requests::permission::get::Request {
340 body_id,
341 pagination,
342 })
343 .await?
344 .0
345 .0)
346 }
347
348 async fn body_by_id_permission_post(
349 &self,
350 body_id: BodyId,
351 new_permission: NewPermission,
352 ) -> Result<Permission, Self::ClientError> {
353 Ok(self
354 .execute(requests::permission::post::Request {
355 body_id,
356 payload: types::permission::post::RequestBody(new_permission),
357 })
358 .await?
359 .0
360 .0)
361 }
362
363 async fn body_by_id_permission_by_id_get(
364 &self,
365 body_id: BodyId,
366 permission_id: BodyPermissionId,
367 ) -> Result<types::permission::Permission, Self::ClientError> {
368 let response = self
369 .execute(requests::permission::by_id::get::Request {
370 body_id,
371 permission_id,
372 })
373 .await?;
374 Ok(response.0.0)
375 }
376
377 async fn body_by_id_meeting_get(
378 &self,
379 body_id: BodyId,
380 pagination: Pagination,
381 ) -> Result<DataPage<types::meeting::Meeting>, Self::ClientError> {
382 Ok(self
383 .execute(requests::meeting::get::Request {
384 body_id,
385 pagination,
386 })
387 .await?
388 .0
389 .0)
390 }
391
392 async fn body_by_id_meeting_post(
393 &self,
394 body_id: BodyId,
395 new_meeting: types::meeting::NewMeeting,
396 ) -> Result<types::meeting::Meeting, Self::ClientError> {
397 Ok(self
398 .execute(requests::meeting::post::Request {
399 body_id,
400 payload: types::meeting::post::RequestBody(new_meeting),
401 })
402 .await?
403 .0
404 .0)
405 }
406
407 async fn body_by_id_meeting_by_id_get(
408 &self,
409 body_id: BodyId,
410 meeting_id: MeetingId,
411 ) -> Result<types::meeting::Meeting, Self::ClientError> {
412 let response = self
413 .execute(requests::meeting::by_id::get::Request {
414 body_id,
415 meeting_id,
416 })
417 .await?;
418 Ok(response.0.0)
419 }
420
421 async fn body_by_id_meeting_by_id_agenda_item_get(
422 &self,
423 body_id: BodyId,
424 meeting_id: MeetingId,
425 pagination: Pagination,
426 ) -> Result<DataPage<types::agenda_item::AgendaItem>, Self::ClientError> {
427 let response = self
428 .execute(requests::agenda_item::get::Request {
429 body_id,
430 meeting_id,
431 pagination,
432 })
433 .await?;
434 Ok(response.0.0)
435 }
436
437 async fn body_by_id_meeting_by_id_agenda_item_post(
438 &self,
439 body_id: BodyId,
440 meeting_id: MeetingId,
441 new_agenda_item: types::agenda_item::NewAgendaItem,
442 ) -> Result<types::agenda_item::AgendaItem, Self::ClientError> {
443 Ok(self
444 .execute(requests::agenda_item::post::Request {
445 body_id,
446 meeting_id,
447 payload: types::agenda_item::post::RequestBody(new_agenda_item),
448 })
449 .await?
450 .0
451 .0)
452 }
453
454 async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
455 &self,
456 body_id: BodyId,
457 meeting_id: MeetingId,
458 agenda_item_id: AgendaItemId,
459 ) -> Result<types::agenda_item::AgendaItem, Self::ClientError> {
460 let response = self
461 .execute(requests::agenda_item::by_id::get::Request {
462 body_id,
463 meeting_id,
464 agenda_item_id,
465 })
466 .await?;
467 Ok(response.0.0)
468 }
469
470 async fn body_by_id_meeting_by_id_agenda_item_by_id_patch(
471 &self,
472 body_id: BodyId,
473 meeting_id: MeetingId,
474 agenda_item_id: AgendaItemId,
475 update_agenda_item: UpdateAgendaItem,
476 ) -> Result<types::agenda_item::AgendaItem, Self::ClientError> {
477 let response = self
478 .execute(requests::agenda_item::by_id::patch::Request {
479 body_id,
480 meeting_id,
481 agenda_item_id,
482 payload: types::agenda_item::by_id::patch::RequestBody(update_agenda_item),
483 })
484 .await?;
485 Ok(response.0.0)
486 }
487
488 async fn body_by_id_organization_get(
489 &self,
490 body_id: BodyId,
491 pagination: Pagination,
492 ) -> Result<DataPage<types::organization::Organization>, Self::ClientError> {
493 Ok(self
494 .execute(requests::organization::get::Request {
495 body_id,
496 pagination,
497 })
498 .await?
499 .0
500 .0)
501 }
502
503 async fn body_by_id_organization_post(
504 &self,
505 body_id: BodyId,
506 new_organization: types::organization::NewOrganization,
507 ) -> Result<types::organization::Organization, Self::ClientError> {
508 Ok(self
509 .execute(requests::organization::post::Request {
510 body_id,
511 payload: types::organization::post::RequestBody(new_organization),
512 })
513 .await?
514 .0
515 .0)
516 }
517
518 async fn body_by_id_organization_by_id_get(
519 &self,
520 body_id: BodyId,
521 organization_id: OrganizationId,
522 ) -> Result<types::organization::Organization, Self::ClientError> {
523 let response = self
524 .execute(requests::organization::by_id::get::Request {
525 body_id,
526 organization_id,
527 })
528 .await?;
529 Ok(response.0.0)
530 }
531
532 async fn body_by_id_organization_by_id_membership_get(
533 &self,
534 body_id: BodyId,
535 organization_id: OrganizationId,
536 pagination: Pagination,
537 ) -> Result<DataPage<Membership>, Self::ClientError> {
538 let response = self
539 .execute(requests::organization::by_id::membership::get::Request {
540 body_id,
541 organization_id,
542 pagination,
543 })
544 .await?;
545 Ok(response.0.0)
546 }
547
548 async fn body_by_id_organization_by_id_membership_post(
549 &self,
550 body_id: BodyId,
551 organization_id: OrganizationId,
552 new_membership: organization::by_id::membership::NewMembership,
553 ) -> Result<Membership, Self::ClientError> {
554 Ok(self
555 .execute(requests::organization::by_id::membership::post::Request {
556 body_id,
557 organization_id,
558 payload: types::organization::by_id::membership::post::RequestBody(new_membership),
559 })
560 .await?
561 .0
562 .0)
563 }
564
565 async fn body_by_id_organization_by_id_membership_by_id_get(
566 &self,
567 body_id: BodyId,
568 organization_id: OrganizationId,
569 membership_id: MembershipId,
570 ) -> Result<Membership, Self::ClientError> {
571 let response = self
572 .execute(
573 requests::organization::by_id::membership::by_id::get::Request {
574 body_id,
575 organization_id,
576 membership_id,
577 },
578 )
579 .await?;
580 Ok(response.0.0)
581 }
582
583 async fn body_by_id_organization_by_id_membership_by_id_patch(
584 &self,
585 body_id: BodyId,
586 organization_id: OrganizationId,
587 membership_id: MembershipId,
588 update_membership: UpdateMembership,
589 ) -> Result<Membership, Self::ClientError> {
590 let response = self
591 .execute(
592 requests::organization::by_id::membership::by_id::patch::Request {
593 body_id,
594 organization_id,
595 membership_id,
596 payload: organization::by_id::membership::by_id::patch::RequestBody(
597 update_membership,
598 ),
599 },
600 )
601 .await?;
602 Ok(response.0.0)
603 }
604
605 async fn body_by_id_person_get(
606 &self,
607 body_id: BodyId,
608 pagination: Pagination,
609 ) -> Result<DataPage<types::person::Person>, Self::ClientError> {
610 Ok(self
611 .execute(requests::person::get::Request {
612 body_id,
613 pagination,
614 })
615 .await?
616 .0
617 .0)
618 }
619
620 async fn body_by_id_person_post(
621 &self,
622 body_id: BodyId,
623 new_person: types::person::NewPerson,
624 ) -> Result<types::person::Person, Self::ClientError> {
625 Ok(self
626 .execute(requests::person::post::Request {
627 body_id,
628 payload: types::person::post::RequestBody(new_person),
629 })
630 .await?
631 .0
632 .0)
633 }
634
635 async fn body_by_id_person_by_id_get(
636 &self,
637 body_id: BodyId,
638 person_id: PersonId,
639 ) -> Result<types::person::Person, Self::ClientError> {
640 let response = self
641 .execute(requests::person::by_id::get::Request { body_id, person_id })
642 .await?;
643 Ok(response.0.0)
644 }
645
646 async fn body_by_id_person_by_id_membership_get(
647 &self,
648 body_id: BodyId,
649 person_id: PersonId,
650 pagination: Pagination,
651 ) -> Result<DataPage<Membership>, Self::ClientError> {
652 let response = self
653 .execute(requests::person::by_id::membership::get::Request {
654 body_id,
655 person_id,
656 pagination,
657 })
658 .await?;
659 Ok(response.0.0)
660 }
661
662 async fn body_by_id_person_by_id_membership_post(
663 &self,
664 body_id: BodyId,
665 person_id: PersonId,
666 new_membership: person::by_id::membership::NewMembership,
667 ) -> Result<Membership, Self::ClientError> {
668 Ok(self
669 .execute(requests::person::by_id::membership::post::Request {
670 body_id,
671 person_id,
672 payload: types::person::by_id::membership::post::RequestBody(new_membership),
673 })
674 .await?
675 .0
676 .0)
677 }
678
679 async fn body_by_id_person_by_id_membership_by_id_get(
680 &self,
681 body_id: BodyId,
682 person_id: PersonId,
683 membership_id: MembershipId,
684 ) -> Result<Membership, Self::ClientError> {
685 let response = self
686 .execute(requests::person::by_id::membership::by_id::get::Request {
687 body_id,
688 person_id,
689 membership_id,
690 })
691 .await?;
692 Ok(response.0.0)
693 }
694
695 async fn body_by_id_person_by_id_membership_by_id_patch(
696 &self,
697 body_id: BodyId,
698 person_id: PersonId,
699 membership_id: MembershipId,
700 update_membership: UpdateMembership,
701 ) -> Result<Membership, Self::ClientError> {
702 let response = self
703 .execute(requests::person::by_id::membership::by_id::patch::Request {
704 body_id,
705 person_id,
706 membership_id,
707 payload: person::by_id::membership::by_id::patch::RequestBody(update_membership),
708 })
709 .await?;
710 Ok(response.0.0)
711 }
712
713 async fn body_by_id_membership_get(
714 &self,
715 body_id: BodyId,
716 pagination: Pagination,
717 ) -> Result<DataPage<Membership>, Self::ClientError> {
718 let response = self
719 .execute(requests::membership::get::Request {
720 body_id,
721 pagination,
722 })
723 .await?;
724 Ok(response.0.0)
725 }
726
727 async fn body_by_id_membership_post(
728 &self,
729 body_id: BodyId,
730 new_membership: membership::NewMembership,
731 ) -> Result<Membership, Self::ClientError> {
732 Ok(self
733 .execute(requests::membership::post::Request {
734 body_id,
735 payload: membership::post::RequestBody(new_membership),
736 })
737 .await?
738 .0
739 .0)
740 }
741
742 async fn body_by_id_membership_by_id_get(
743 &self,
744 body_id: BodyId,
745 membership_id: MembershipId,
746 ) -> Result<Membership, Self::ClientError> {
747 let response = self
748 .execute(requests::membership::by_id::get::Request {
749 body_id,
750 membership_id,
751 })
752 .await?;
753 Ok(response.0.0)
754 }
755
756 async fn body_by_id_membership_by_id_patch(
757 &self,
758 body_id: BodyId,
759 membership_id: MembershipId,
760 update_membership: UpdateMembership,
761 ) -> Result<Membership, Self::ClientError> {
762 let response = self
763 .execute(requests::membership::by_id::patch::Request {
764 body_id,
765 membership_id,
766 payload: membership::by_id::patch::RequestBody(update_membership),
767 })
768 .await?;
769 Ok(response.0.0)
770 }
771
772 async fn me_profile_get(&self) -> Result<types::me::profile::Profile, Self::ClientError> {
773 Ok(self.execute(requests::me::profile::get::Request).await?.0.0)
774 }
775
776 async fn me_profile_patch(
777 &self,
778 update_profile: UpdateProfile,
779 ) -> Result<Profile, Self::ClientError> {
780 Ok(self
781 .execute(requests::me::profile::patch::Request {
782 payload: types::me::profile::patch::RequestBody(update_profile),
783 })
784 .await?
785 .0
786 .0)
787 }
788}