Skip to main content

pib_client/
pib_client.rs

1// SPDX-FileCopyrightText: Politik im Blick developers
2// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
3//
4// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2
5
6use pib_service_api_types::{
7    Index, Pagination,
8    body::{
9        Body, UpdateBody,
10        by_id::{
11            meeting::{
12                Meeting, MeetingParentId, UpdateMeeting,
13                by_id::agenda_item::{
14                    AgendaItem, AgendaItemParentId, UpdateAgendaItem,
15                    by_id::consultation::{Consultation, ConsultationParentId, UpdateConsultation},
16                },
17            },
18            membership::{
19                self, Membership, MembershipParentId, OrganizationMembershipParentId,
20                PersonMembershipParentId, UpdateMembership,
21            },
22            organization::{self, Organization, OrganizationParentId, UpdateOrganization},
23            permission::{NewPermission, Permission, PermissionParentId},
24            person::{self, Person, PersonParentId, UpdatePerson},
25        },
26    },
27    config::Config,
28    me::profile::{Profile, UpdateProfile},
29    user::User,
30};
31use pib_service_core_types::{
32    AgendaItemId, BodyId, BodyPermissionId, DataItem, DataPage, MeetingId, MembershipId,
33    OrganizationId, PersonId, UserId,
34};
35
36use crate::IsAuthenticated;
37
38mod requests {
39    pub(super) use pib_client_requests::{
40        body::{
41            self,
42            by_id::{
43                meeting::{self, by_id::agenda_item},
44                membership, organization, permission, person,
45            },
46        },
47        config, get, me, user,
48    };
49}
50
51mod types {
52    pub(super) use pib_service_api_types::{
53        body::{
54            self,
55            by_id::{
56                meeting::{self, by_id::agenda_item},
57                organization, permission, person,
58            },
59        },
60        me,
61    };
62}
63
64#[async_trait::async_trait(?Send)]
65pub trait PibClient: IsAuthenticated + Clone {
66    type ClientError: std::error::Error;
67
68    async fn get(&self) -> Result<Index, Self::ClientError>;
69
70    async fn config_get(&self) -> Result<Config, Self::ClientError>;
71
72    async fn user_get(
73        &self,
74        pagination: Pagination,
75    ) -> Result<DataPage<(), UserId, User>, Self::ClientError>;
76
77    async fn user_by_id_get(
78        &self,
79        user_id: UserId,
80    ) -> Result<DataItem<(), UserId, User>, Self::ClientError>;
81
82    async fn body_get(
83        &self,
84        pagination: Pagination,
85    ) -> Result<DataPage<(), BodyId, Body>, Self::ClientError>;
86
87    async fn body_post(
88        &self,
89        new_body: Body,
90    ) -> Result<DataItem<(), BodyId, Body>, Self::ClientError>;
91
92    async fn body_by_id_get(
93        &self,
94        body_id: BodyId,
95    ) -> Result<DataItem<(), BodyId, Body>, Self::ClientError>;
96
97    async fn body_by_id_patch(
98        &self,
99        body_id: BodyId,
100        update_body: UpdateBody,
101    ) -> Result<DataItem<(), BodyId, Body>, Self::ClientError>;
102
103    async fn body_by_id_permission_get(
104        &self,
105        body_id: BodyId,
106        pagination: Pagination,
107    ) -> Result<DataPage<PermissionParentId, BodyPermissionId, Permission>, Self::ClientError>;
108
109    async fn body_by_id_permission_post(
110        &self,
111        body_id: BodyId,
112        new_permission: NewPermission,
113    ) -> Result<DataItem<PermissionParentId, BodyPermissionId, Permission>, Self::ClientError>;
114
115    async fn body_by_id_permission_by_id_get(
116        &self,
117        body_id: BodyId,
118        permission_id: BodyPermissionId,
119    ) -> Result<DataItem<PermissionParentId, BodyPermissionId, Permission>, Self::ClientError>;
120
121    async fn body_by_id_meeting_get(
122        &self,
123        body_id: BodyId,
124        pagination: Pagination,
125    ) -> Result<DataPage<MeetingParentId, MeetingId, Meeting>, Self::ClientError>;
126
127    async fn body_by_id_meeting_post(
128        &self,
129        body_id: BodyId,
130        new_meeting: Meeting,
131    ) -> Result<DataItem<MeetingParentId, MeetingId, Meeting>, Self::ClientError>;
132
133    async fn body_by_id_meeting_by_id_get(
134        &self,
135        body_id: BodyId,
136        meeting_id: MeetingId,
137    ) -> Result<DataItem<MeetingParentId, MeetingId, Meeting>, Self::ClientError>;
138
139    async fn body_by_id_meeting_by_id_patch(
140        &self,
141        body_id: BodyId,
142        meeting_id: MeetingId,
143        update_meeting: UpdateMeeting,
144    ) -> Result<DataItem<MeetingParentId, MeetingId, Meeting>, Self::ClientError>;
145
146    async fn body_by_id_meeting_by_id_agenda_item_get(
147        &self,
148        body_id: BodyId,
149        meeting_id: MeetingId,
150        pagination: Pagination,
151    ) -> Result<DataPage<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError>;
152
153    async fn body_by_id_meeting_by_id_agenda_item_post(
154        &self,
155        body_id: BodyId,
156        meeting_id: MeetingId,
157        new_agenda_item: AgendaItem,
158    ) -> Result<DataItem<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError>;
159
160    async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
161        &self,
162        body_id: BodyId,
163        meeting_id: MeetingId,
164        agenda_item_id: AgendaItemId,
165    ) -> Result<DataItem<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError>;
166
167    async fn body_by_id_meeting_by_id_agenda_item_by_id_patch(
168        &self,
169        body_id: BodyId,
170        meeting_id: MeetingId,
171        agenda_item_id: AgendaItemId,
172        update_agenda_item: UpdateAgendaItem,
173    ) -> Result<DataItem<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError>;
174
175    async fn body_by_id_meeting_by_id_agenda_item_by_id_consultation_get(
176        &self,
177        body_id: BodyId,
178        meeting_id: MeetingId,
179        agenda_item_id: AgendaItemId,
180    ) -> Result<DataItem<ConsultationParentId, AgendaItemId, Consultation>, Self::ClientError>;
181
182    async fn body_by_id_meeting_by_id_agenda_item_by_id_consultation_put(
183        &self,
184        body_id: BodyId,
185        meeting_id: MeetingId,
186        agenda_item_id: AgendaItemId,
187        consultation: Consultation,
188    ) -> Result<DataItem<ConsultationParentId, AgendaItemId, Consultation>, Self::ClientError>;
189
190    async fn body_by_id_meeting_by_id_agenda_item_by_id_consultation_patch(
191        &self,
192        body_id: BodyId,
193        meeting_id: MeetingId,
194        agenda_item_id: AgendaItemId,
195        update_consultation: UpdateConsultation,
196    ) -> Result<DataItem<ConsultationParentId, AgendaItemId, Consultation>, Self::ClientError>;
197
198    async fn body_by_id_organization_get(
199        &self,
200        body_id: BodyId,
201        pagination: Pagination,
202    ) -> Result<DataPage<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>;
203
204    async fn body_by_id_organization_post(
205        &self,
206        body_id: BodyId,
207        new_organization: Organization,
208    ) -> Result<DataItem<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>;
209
210    async fn body_by_id_organization_by_id_get(
211        &self,
212        body_id: BodyId,
213        organization_id: OrganizationId,
214    ) -> Result<DataItem<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>;
215
216    async fn body_by_id_organization_by_id_patch(
217        &self,
218        body_id: BodyId,
219        organization_id: OrganizationId,
220        update_organization: UpdateOrganization,
221    ) -> Result<DataItem<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>;
222
223    async fn body_by_id_organization_by_id_membership_get(
224        &self,
225        body_id: BodyId,
226        organization_id: OrganizationId,
227        pagination: Pagination,
228    ) -> Result<DataPage<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>;
229
230    async fn body_by_id_organization_by_id_membership_post(
231        &self,
232        body_id: BodyId,
233        organization_id: OrganizationId,
234        new_membership: organization::by_id::membership::NewMembership,
235    ) -> Result<DataItem<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>;
236
237    async fn body_by_id_organization_by_id_membership_by_id_get(
238        &self,
239        body_id: BodyId,
240        organization_id: OrganizationId,
241        membership_id: MembershipId,
242    ) -> Result<DataItem<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>;
243
244    async fn body_by_id_organization_by_id_membership_by_id_patch(
245        &self,
246        body_id: BodyId,
247        organization_id: OrganizationId,
248        membership_id: MembershipId,
249        update_membership: UpdateMembership,
250    ) -> Result<DataItem<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>;
251
252    async fn body_by_id_person_get(
253        &self,
254        body_id: BodyId,
255        pagination: Pagination,
256    ) -> Result<DataPage<PersonParentId, PersonId, Person>, Self::ClientError>;
257
258    async fn body_by_id_person_post(
259        &self,
260        body_id: BodyId,
261        new_person: Person,
262    ) -> Result<DataItem<PersonParentId, PersonId, Person>, Self::ClientError>;
263
264    async fn body_by_id_person_by_id_get(
265        &self,
266        body_id: BodyId,
267        person_id: PersonId,
268    ) -> Result<DataItem<PersonParentId, PersonId, Person>, Self::ClientError>;
269
270    async fn body_by_id_person_by_id_patch(
271        &self,
272        body_id: BodyId,
273        person_id: PersonId,
274        update_person: UpdatePerson,
275    ) -> Result<DataItem<PersonParentId, PersonId, Person>, Self::ClientError>;
276
277    async fn body_by_id_person_by_id_membership_get(
278        &self,
279        body_id: BodyId,
280        person_id: PersonId,
281        pagination: Pagination,
282    ) -> Result<DataPage<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>;
283
284    async fn body_by_id_person_by_id_membership_post(
285        &self,
286        body_id: BodyId,
287        person_id: PersonId,
288        new_membership: person::by_id::membership::NewMembership,
289    ) -> Result<DataItem<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>;
290
291    async fn body_by_id_person_by_id_membership_by_id_get(
292        &self,
293        body_id: BodyId,
294        person_id: PersonId,
295        membership_id: MembershipId,
296    ) -> Result<DataItem<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>;
297
298    async fn body_by_id_person_by_id_membership_by_id_patch(
299        &self,
300        body_id: BodyId,
301        person_id: PersonId,
302        membership_id: MembershipId,
303        update_membership: UpdateMembership,
304    ) -> Result<DataItem<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>;
305
306    async fn body_by_id_membership_get(
307        &self,
308        body_id: BodyId,
309        pagination: Pagination,
310    ) -> Result<DataPage<MembershipParentId, MembershipId, Membership>, Self::ClientError>;
311
312    async fn body_by_id_membership_post(
313        &self,
314        body_id: BodyId,
315        new_membership: Membership,
316    ) -> Result<DataItem<MembershipParentId, MembershipId, Membership>, Self::ClientError>;
317
318    async fn body_by_id_membership_by_id_get(
319        &self,
320        body_id: BodyId,
321        membership_id: MembershipId,
322    ) -> Result<DataItem<MembershipParentId, MembershipId, Membership>, Self::ClientError>;
323
324    async fn body_by_id_membership_by_id_patch(
325        &self,
326        body_id: BodyId,
327        membership_id: MembershipId,
328        update_membership: UpdateMembership,
329    ) -> Result<DataItem<MembershipParentId, MembershipId, Membership>, Self::ClientError>;
330
331    async fn me_profile_get(&self) -> Result<Profile, Self::ClientError>;
332
333    async fn me_profile_patch(
334        &self,
335        update_profile: UpdateProfile,
336    ) -> Result<Profile, Self::ClientError>;
337}
338
339#[async_trait::async_trait(?Send)]
340impl<C: http_request_derive_client::Client + IsAuthenticated + Clone> PibClient for C {
341    type ClientError = C::ClientError;
342
343    async fn get(&self) -> Result<Index, Self::ClientError> {
344        let response = self.execute(requests::get::Request).await?;
345        Ok(response.0.0)
346    }
347
348    async fn config_get(&self) -> Result<Config, Self::ClientError> {
349        let response = self.execute(requests::config::get::Request).await?;
350        Ok(response.0.0)
351    }
352
353    async fn user_get(
354        &self,
355        pagination: Pagination,
356    ) -> Result<DataPage<(), UserId, User>, Self::ClientError> {
357        let response = self
358            .execute(requests::user::get::Request { pagination })
359            .await?;
360        Ok(response.0.0)
361    }
362
363    async fn user_by_id_get(
364        &self,
365        user_id: UserId,
366    ) -> Result<DataItem<(), UserId, User>, Self::ClientError> {
367        let response = self
368            .execute(requests::user::by_id::get::Request { user_id })
369            .await?;
370        Ok(response.0.0)
371    }
372
373    async fn body_get(
374        &self,
375        pagination: Pagination,
376    ) -> Result<DataPage<(), BodyId, Body>, Self::ClientError> {
377        let response = self
378            .execute(requests::body::get::Request { pagination })
379            .await?;
380        Ok(response.0.0)
381    }
382
383    async fn body_post(
384        &self,
385        new_body: Body,
386    ) -> Result<DataItem<(), BodyId, Body>, Self::ClientError> {
387        Ok(self
388            .execute(requests::body::post::Request {
389                payload: types::body::post::RequestBody(new_body),
390            })
391            .await?
392            .0
393            .0)
394    }
395
396    async fn body_by_id_get(
397        &self,
398        body_id: BodyId,
399    ) -> Result<DataItem<(), BodyId, Body>, Self::ClientError> {
400        let response = self
401            .execute(requests::body::by_id::get::Request { body_id })
402            .await?;
403        Ok(response.0.0)
404    }
405
406    async fn body_by_id_patch(
407        &self,
408        body_id: BodyId,
409        update_body: UpdateBody,
410    ) -> Result<DataItem<(), BodyId, Body>, Self::ClientError> {
411        Ok(self
412            .execute(requests::body::by_id::patch::Request {
413                body_id,
414                payload: types::body::by_id::patch::RequestBody(update_body),
415            })
416            .await?
417            .0
418            .0)
419    }
420
421    async fn body_by_id_permission_get(
422        &self,
423        body_id: BodyId,
424        pagination: Pagination,
425    ) -> Result<DataPage<PermissionParentId, BodyPermissionId, Permission>, Self::ClientError> {
426        Ok(self
427            .execute(requests::permission::get::Request {
428                body_id,
429                pagination,
430            })
431            .await?
432            .0
433            .0)
434    }
435
436    async fn body_by_id_permission_post(
437        &self,
438        body_id: BodyId,
439        new_permission: NewPermission,
440    ) -> Result<DataItem<PermissionParentId, BodyPermissionId, Permission>, Self::ClientError> {
441        Ok(self
442            .execute(requests::permission::post::Request {
443                body_id,
444                payload: types::permission::post::RequestBody(new_permission),
445            })
446            .await?
447            .0
448            .0)
449    }
450
451    async fn body_by_id_permission_by_id_get(
452        &self,
453        body_id: BodyId,
454        permission_id: BodyPermissionId,
455    ) -> Result<DataItem<PermissionParentId, BodyPermissionId, Permission>, Self::ClientError> {
456        let response = self
457            .execute(requests::permission::by_id::get::Request {
458                body_id,
459                permission_id,
460            })
461            .await?;
462        Ok(response.0.0)
463    }
464
465    async fn body_by_id_meeting_get(
466        &self,
467        body_id: BodyId,
468        pagination: Pagination,
469    ) -> Result<DataPage<MeetingParentId, MeetingId, Meeting>, Self::ClientError> {
470        Ok(self
471            .execute(requests::meeting::get::Request {
472                body_id,
473                pagination,
474            })
475            .await?
476            .0
477            .0)
478    }
479
480    async fn body_by_id_meeting_post(
481        &self,
482        body_id: BodyId,
483        new_meeting: Meeting,
484    ) -> Result<DataItem<MeetingParentId, MeetingId, Meeting>, Self::ClientError> {
485        Ok(self
486            .execute(requests::meeting::post::Request {
487                body_id,
488                payload: types::meeting::post::RequestBody(new_meeting),
489            })
490            .await?
491            .0
492            .0)
493    }
494
495    async fn body_by_id_meeting_by_id_get(
496        &self,
497        body_id: BodyId,
498        meeting_id: MeetingId,
499    ) -> Result<DataItem<MeetingParentId, MeetingId, Meeting>, Self::ClientError> {
500        let response = self
501            .execute(requests::meeting::by_id::get::Request {
502                body_id,
503                meeting_id,
504            })
505            .await?;
506        Ok(response.0.0)
507    }
508
509    async fn body_by_id_meeting_by_id_patch(
510        &self,
511        body_id: BodyId,
512        meeting_id: MeetingId,
513        update_meeting: UpdateMeeting,
514    ) -> Result<DataItem<MeetingParentId, MeetingId, Meeting>, Self::ClientError> {
515        let response = self
516            .execute(requests::meeting::by_id::patch::Request {
517                body_id,
518                meeting_id,
519                payload: types::meeting::by_id::patch::RequestBody(update_meeting),
520            })
521            .await?;
522        Ok(response.0.0)
523    }
524
525    async fn body_by_id_meeting_by_id_agenda_item_get(
526        &self,
527        body_id: BodyId,
528        meeting_id: MeetingId,
529        pagination: Pagination,
530    ) -> Result<DataPage<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError> {
531        let response = self
532            .execute(requests::agenda_item::get::Request {
533                body_id,
534                meeting_id,
535                pagination,
536            })
537            .await?;
538        Ok(response.0.0)
539    }
540
541    async fn body_by_id_meeting_by_id_agenda_item_post(
542        &self,
543        body_id: BodyId,
544        meeting_id: MeetingId,
545        new_agenda_item: AgendaItem,
546    ) -> Result<DataItem<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError> {
547        Ok(self
548            .execute(requests::agenda_item::post::Request {
549                body_id,
550                meeting_id,
551                payload: types::agenda_item::post::RequestBody(new_agenda_item),
552            })
553            .await?
554            .0
555            .0)
556    }
557
558    async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
559        &self,
560        body_id: BodyId,
561        meeting_id: MeetingId,
562        agenda_item_id: AgendaItemId,
563    ) -> Result<DataItem<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError> {
564        let response = self
565            .execute(requests::agenda_item::by_id::get::Request {
566                body_id,
567                meeting_id,
568                agenda_item_id,
569            })
570            .await?;
571        Ok(response.0.0)
572    }
573
574    async fn body_by_id_meeting_by_id_agenda_item_by_id_patch(
575        &self,
576        body_id: BodyId,
577        meeting_id: MeetingId,
578        agenda_item_id: AgendaItemId,
579        update_agenda_item: UpdateAgendaItem,
580    ) -> Result<DataItem<AgendaItemParentId, AgendaItemId, AgendaItem>, Self::ClientError> {
581        let response = self
582            .execute(requests::agenda_item::by_id::patch::Request {
583                body_id,
584                meeting_id,
585                agenda_item_id,
586                payload: types::agenda_item::by_id::patch::RequestBody(update_agenda_item),
587            })
588            .await?;
589        Ok(response.0.0)
590    }
591
592    async fn body_by_id_meeting_by_id_agenda_item_by_id_consultation_get(
593        &self,
594        body_id: BodyId,
595        meeting_id: MeetingId,
596        agenda_item_id: AgendaItemId,
597    ) -> Result<DataItem<ConsultationParentId, AgendaItemId, Consultation>, Self::ClientError> {
598        let response = self
599            .execute(requests::agenda_item::by_id::consultation::get::Request {
600                body_id,
601                meeting_id,
602                agenda_item_id,
603            })
604            .await?;
605        Ok(response.0.0)
606    }
607
608    async fn body_by_id_meeting_by_id_agenda_item_by_id_consultation_put(
609        &self,
610        body_id: BodyId,
611        meeting_id: MeetingId,
612        agenda_item_id: AgendaItemId,
613        consultation: Consultation,
614    ) -> Result<DataItem<ConsultationParentId, AgendaItemId, Consultation>, Self::ClientError> {
615        let response = self
616            .execute(requests::agenda_item::by_id::consultation::put::Request {
617                body_id,
618                meeting_id,
619                agenda_item_id,
620                payload: types::agenda_item::by_id::consultation::put::RequestBody(consultation),
621            })
622            .await?;
623        Ok(response.0.0)
624    }
625
626    async fn body_by_id_meeting_by_id_agenda_item_by_id_consultation_patch(
627        &self,
628        body_id: BodyId,
629        meeting_id: MeetingId,
630        agenda_item_id: AgendaItemId,
631        update_consultation: UpdateConsultation,
632    ) -> Result<DataItem<ConsultationParentId, AgendaItemId, Consultation>, Self::ClientError> {
633        let response = self
634            .execute(requests::agenda_item::by_id::consultation::patch::Request {
635                body_id,
636                meeting_id,
637                agenda_item_id,
638                payload: types::agenda_item::by_id::consultation::patch::RequestBody(
639                    update_consultation,
640                ),
641            })
642            .await?;
643        Ok(response.0.0)
644    }
645
646    async fn body_by_id_organization_get(
647        &self,
648        body_id: BodyId,
649        pagination: Pagination,
650    ) -> Result<DataPage<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>
651    {
652        Ok(self
653            .execute(requests::organization::get::Request {
654                body_id,
655                pagination,
656            })
657            .await?
658            .0
659            .0)
660    }
661
662    async fn body_by_id_organization_post(
663        &self,
664        body_id: BodyId,
665        new_organization: Organization,
666    ) -> Result<DataItem<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>
667    {
668        Ok(self
669            .execute(requests::organization::post::Request {
670                body_id,
671                payload: types::organization::post::RequestBody(new_organization),
672            })
673            .await?
674            .0
675            .0)
676    }
677
678    async fn body_by_id_organization_by_id_get(
679        &self,
680        body_id: BodyId,
681        organization_id: OrganizationId,
682    ) -> Result<DataItem<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>
683    {
684        let response = self
685            .execute(requests::organization::by_id::get::Request {
686                body_id,
687                organization_id,
688            })
689            .await?;
690        Ok(response.0.0)
691    }
692
693    async fn body_by_id_organization_by_id_patch(
694        &self,
695        body_id: BodyId,
696        organization_id: OrganizationId,
697        update_organization: UpdateOrganization,
698    ) -> Result<DataItem<OrganizationParentId, OrganizationId, Organization>, Self::ClientError>
699    {
700        let response = self
701            .execute(requests::organization::by_id::patch::Request {
702                body_id,
703                organization_id,
704                payload: organization::by_id::patch::RequestBody(update_organization),
705            })
706            .await?;
707        Ok(response.0.0)
708    }
709
710    async fn body_by_id_organization_by_id_membership_get(
711        &self,
712        body_id: BodyId,
713        organization_id: OrganizationId,
714        pagination: Pagination,
715    ) -> Result<DataPage<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>
716    {
717        let response = self
718            .execute(requests::organization::by_id::membership::get::Request {
719                body_id,
720                organization_id,
721                pagination,
722            })
723            .await?;
724        Ok(response.0.0)
725    }
726
727    async fn body_by_id_organization_by_id_membership_post(
728        &self,
729        body_id: BodyId,
730        organization_id: OrganizationId,
731        new_membership: organization::by_id::membership::NewMembership,
732    ) -> Result<DataItem<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>
733    {
734        Ok(self
735            .execute(requests::organization::by_id::membership::post::Request {
736                body_id,
737                organization_id,
738                payload: types::organization::by_id::membership::post::RequestBody(new_membership),
739            })
740            .await?
741            .0
742            .0)
743    }
744
745    async fn body_by_id_organization_by_id_membership_by_id_get(
746        &self,
747        body_id: BodyId,
748        organization_id: OrganizationId,
749        membership_id: MembershipId,
750    ) -> Result<DataItem<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>
751    {
752        let response = self
753            .execute(
754                requests::organization::by_id::membership::by_id::get::Request {
755                    body_id,
756                    organization_id,
757                    membership_id,
758                },
759            )
760            .await?;
761        Ok(response.0.0)
762    }
763
764    async fn body_by_id_organization_by_id_membership_by_id_patch(
765        &self,
766        body_id: BodyId,
767        organization_id: OrganizationId,
768        membership_id: MembershipId,
769        update_membership: UpdateMembership,
770    ) -> Result<DataItem<OrganizationMembershipParentId, MembershipId, Membership>, Self::ClientError>
771    {
772        let response = self
773            .execute(
774                requests::organization::by_id::membership::by_id::patch::Request {
775                    body_id,
776                    organization_id,
777                    membership_id,
778                    payload: organization::by_id::membership::by_id::patch::RequestBody(
779                        update_membership,
780                    ),
781                },
782            )
783            .await?;
784        Ok(response.0.0)
785    }
786
787    async fn body_by_id_person_get(
788        &self,
789        body_id: BodyId,
790        pagination: Pagination,
791    ) -> Result<DataPage<PersonParentId, PersonId, Person>, Self::ClientError> {
792        Ok(self
793            .execute(requests::person::get::Request {
794                body_id,
795                pagination,
796            })
797            .await?
798            .0
799            .0)
800    }
801
802    async fn body_by_id_person_post(
803        &self,
804        body_id: BodyId,
805        new_person: Person,
806    ) -> Result<DataItem<PersonParentId, PersonId, Person>, Self::ClientError> {
807        Ok(self
808            .execute(requests::person::post::Request {
809                body_id,
810                payload: types::person::post::RequestBody(new_person),
811            })
812            .await?
813            .0
814            .0)
815    }
816
817    async fn body_by_id_person_by_id_get(
818        &self,
819        body_id: BodyId,
820        person_id: PersonId,
821    ) -> Result<DataItem<PersonParentId, PersonId, Person>, Self::ClientError> {
822        let response = self
823            .execute(requests::person::by_id::get::Request { body_id, person_id })
824            .await?;
825        Ok(response.0.0)
826    }
827
828    async fn body_by_id_person_by_id_patch(
829        &self,
830        body_id: BodyId,
831        person_id: PersonId,
832        update_person: UpdatePerson,
833    ) -> Result<DataItem<PersonParentId, PersonId, Person>, Self::ClientError> {
834        let response = self
835            .execute(requests::person::by_id::patch::Request {
836                body_id,
837                person_id,
838                payload: person::by_id::patch::RequestBody(update_person),
839            })
840            .await?;
841        Ok(response.0.0)
842    }
843
844    async fn body_by_id_person_by_id_membership_get(
845        &self,
846        body_id: BodyId,
847        person_id: PersonId,
848        pagination: Pagination,
849    ) -> Result<DataPage<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>
850    {
851        let response = self
852            .execute(requests::person::by_id::membership::get::Request {
853                body_id,
854                person_id,
855                pagination,
856            })
857            .await?;
858        Ok(response.0.0)
859    }
860
861    async fn body_by_id_person_by_id_membership_post(
862        &self,
863        body_id: BodyId,
864        person_id: PersonId,
865        new_membership: person::by_id::membership::NewMembership,
866    ) -> Result<DataItem<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>
867    {
868        Ok(self
869            .execute(requests::person::by_id::membership::post::Request {
870                body_id,
871                person_id,
872                payload: types::person::by_id::membership::post::RequestBody(new_membership),
873            })
874            .await?
875            .0
876            .0)
877    }
878
879    async fn body_by_id_person_by_id_membership_by_id_get(
880        &self,
881        body_id: BodyId,
882        person_id: PersonId,
883        membership_id: MembershipId,
884    ) -> Result<DataItem<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>
885    {
886        let response = self
887            .execute(requests::person::by_id::membership::by_id::get::Request {
888                body_id,
889                person_id,
890                membership_id,
891            })
892            .await?;
893        Ok(response.0.0)
894    }
895
896    async fn body_by_id_person_by_id_membership_by_id_patch(
897        &self,
898        body_id: BodyId,
899        person_id: PersonId,
900        membership_id: MembershipId,
901        update_membership: UpdateMembership,
902    ) -> Result<DataItem<PersonMembershipParentId, MembershipId, Membership>, Self::ClientError>
903    {
904        let response = self
905            .execute(requests::person::by_id::membership::by_id::patch::Request {
906                body_id,
907                person_id,
908                membership_id,
909                payload: person::by_id::membership::by_id::patch::RequestBody(update_membership),
910            })
911            .await?;
912        Ok(response.0.0)
913    }
914
915    async fn body_by_id_membership_get(
916        &self,
917        body_id: BodyId,
918        pagination: Pagination,
919    ) -> Result<DataPage<MembershipParentId, MembershipId, Membership>, Self::ClientError> {
920        let response = self
921            .execute(requests::membership::get::Request {
922                body_id,
923                pagination,
924            })
925            .await?;
926        Ok(response.0.0)
927    }
928
929    async fn body_by_id_membership_post(
930        &self,
931        body_id: BodyId,
932        new_membership: Membership,
933    ) -> Result<DataItem<MembershipParentId, MembershipId, Membership>, Self::ClientError> {
934        Ok(self
935            .execute(requests::membership::post::Request {
936                body_id,
937                payload: membership::post::RequestBody(new_membership),
938            })
939            .await?
940            .0
941            .0)
942    }
943
944    async fn body_by_id_membership_by_id_get(
945        &self,
946        body_id: BodyId,
947        membership_id: MembershipId,
948    ) -> Result<DataItem<MembershipParentId, MembershipId, Membership>, Self::ClientError> {
949        let response = self
950            .execute(requests::membership::by_id::get::Request {
951                body_id,
952                membership_id,
953            })
954            .await?;
955        Ok(response.0.0)
956    }
957
958    async fn body_by_id_membership_by_id_patch(
959        &self,
960        body_id: BodyId,
961        membership_id: MembershipId,
962        update_membership: UpdateMembership,
963    ) -> Result<DataItem<MembershipParentId, MembershipId, Membership>, Self::ClientError> {
964        let response = self
965            .execute(requests::membership::by_id::patch::Request {
966                body_id,
967                membership_id,
968                payload: membership::by_id::patch::RequestBody(update_membership),
969            })
970            .await?;
971        Ok(response.0.0)
972    }
973
974    async fn me_profile_get(&self) -> Result<types::me::profile::Profile, Self::ClientError> {
975        Ok(self.execute(requests::me::profile::get::Request).await?.0.0)
976    }
977
978    async fn me_profile_patch(
979        &self,
980        update_profile: UpdateProfile,
981    ) -> Result<Profile, Self::ClientError> {
982        Ok(self
983            .execute(requests::me::profile::patch::Request {
984                payload: types::me::profile::patch::RequestBody(update_profile),
985            })
986            .await?
987            .0
988            .0)
989    }
990}