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