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