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