1use pib_service_api_types::Pagination;
7use pib_service_core_types::{AgendaItemId, BodyId, MeetingId, OrganizationId, PersonId, UserId};
8
9mod requests {
10 pub(super) use pib_client_requests::{
11 body::{
12 self,
13 by_id::{
14 meeting::{self, by_id::agenda_item},
15 organization, person,
16 },
17 },
18 config, get, me, user,
19 };
20}
21mod types {
22 pub(super) use pib_service_api_types::{
23 body::{
24 self,
25 by_id::{
26 meeting::{self, by_id::agenda_item},
27 organization, person,
28 },
29 },
30 config, get, me, user,
31 };
32}
33
34#[async_trait::async_trait(?Send)]
35pub trait PibClient: Clone {
36 type ClientError: std::error::Error;
37
38 async fn get(&self) -> Result<types::get::ResponseBody, Self::ClientError>;
39
40 async fn config_get(&self) -> Result<types::config::get::ResponseBody, Self::ClientError>;
41
42 async fn user_get(
43 &self,
44 pagination: Pagination,
45 ) -> Result<types::user::get::ResponseBody, Self::ClientError>;
46
47 async fn user_by_id_get(
48 &self,
49 user_id: UserId,
50 ) -> Result<types::user::by_id::get::ResponseBody, Self::ClientError>;
51
52 async fn body_get(
53 &self,
54 pagination: Pagination,
55 ) -> Result<types::body::get::ResponseBody, Self::ClientError>;
56
57 async fn body_post(
58 &self,
59 payload: types::body::post::RequestBody,
60 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError>;
61
62 async fn body_by_id_get(
63 &self,
64 body_id: BodyId,
65 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError>;
66
67 async fn body_by_id_meeting_get(
68 &self,
69 body_id: BodyId,
70 pagination: Pagination,
71 ) -> Result<types::meeting::get::ResponseBody, Self::ClientError>;
72
73 async fn body_by_id_meeting_post(
74 &self,
75 body_id: BodyId,
76 payload: types::meeting::post::RequestBody,
77 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError>;
78
79 async fn body_by_id_meeting_by_id_get(
80 &self,
81 body_id: BodyId,
82 meeting_id: MeetingId,
83 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError>;
84
85 async fn body_by_id_meeting_by_id_agenda_item_get(
86 &self,
87 body_id: BodyId,
88 meeting_id: MeetingId,
89 pagination: Pagination,
90 ) -> Result<types::agenda_item::get::ResponseBody, Self::ClientError>;
91
92 async fn body_by_id_meeting_by_id_agenda_item_post(
93 &self,
94 body_id: BodyId,
95 meeting_id: MeetingId,
96 payload: types::meeting::by_id::agenda_item::post::RequestBody,
97 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError>;
98
99 async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
100 &self,
101 body_id: BodyId,
102 meeting_id: MeetingId,
103 agenda_item_id: AgendaItemId,
104 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError>;
105
106 async fn body_by_id_organization_get(
107 &self,
108 body_id: BodyId,
109 pagination: Pagination,
110 ) -> Result<types::organization::get::ResponseBody, Self::ClientError>;
111
112 async fn body_by_id_organization_post(
113 &self,
114 body_id: BodyId,
115 payload: types::organization::post::RequestBody,
116 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError>;
117
118 async fn body_by_id_organization_by_id_get(
119 &self,
120 body_id: BodyId,
121 organization_id: OrganizationId,
122 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError>;
123
124 async fn body_by_id_person_get(
125 &self,
126 body_id: BodyId,
127 pagination: Pagination,
128 ) -> Result<types::person::get::ResponseBody, Self::ClientError>;
129
130 async fn body_by_id_person_post(
131 &self,
132 body_id: BodyId,
133 payload: types::person::post::RequestBody,
134 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError>;
135
136 async fn body_by_id_person_by_id_get(
137 &self,
138 body_id: BodyId,
139 person_id: PersonId,
140 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError>;
141
142 async fn me_profile_get(
143 &self,
144 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError>;
145
146 async fn me_profile_patch(
147 &self,
148 payload: types::me::profile::patch::RequestBody,
149 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError>;
150}
151
152#[async_trait::async_trait(?Send)]
153impl<C: http_request_derive_client::Client + Clone> PibClient for C {
154 type ClientError = C::ClientError;
155
156 async fn get(&self) -> Result<types::get::ResponseBody, Self::ClientError> {
157 let response = self.execute(requests::get::Request).await?;
158 Ok(response.0)
159 }
160
161 async fn config_get(&self) -> Result<types::config::get::ResponseBody, Self::ClientError> {
162 let response = self.execute(requests::config::get::Request).await?;
163 Ok(response.0)
164 }
165
166 async fn user_get(
167 &self,
168 pagination: Pagination,
169 ) -> Result<types::user::get::ResponseBody, Self::ClientError> {
170 let response = self
171 .execute(requests::user::get::Request { pagination })
172 .await?;
173 Ok(response.0)
174 }
175
176 async fn user_by_id_get(
177 &self,
178 user_id: UserId,
179 ) -> Result<types::user::by_id::get::ResponseBody, Self::ClientError> {
180 let response = self
181 .execute(requests::user::by_id::get::Request { user_id })
182 .await?;
183 Ok(response.0)
184 }
185
186 async fn body_get(
187 &self,
188 pagination: Pagination,
189 ) -> Result<types::body::get::ResponseBody, Self::ClientError> {
190 let response = self
191 .execute(requests::body::get::Request { pagination })
192 .await?;
193 Ok(response.0)
194 }
195
196 async fn body_post(
197 &self,
198 payload: types::body::post::RequestBody,
199 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError> {
200 Ok(self
201 .execute(requests::body::post::Request { payload })
202 .await?
203 .0)
204 }
205
206 async fn body_by_id_get(
207 &self,
208 body_id: BodyId,
209 ) -> Result<types::body::by_id::get::ResponseBody, Self::ClientError> {
210 let response = self
211 .execute(requests::body::by_id::get::Request { body_id })
212 .await?;
213 Ok(response.0)
214 }
215
216 async fn body_by_id_meeting_get(
217 &self,
218 body_id: BodyId,
219 pagination: Pagination,
220 ) -> Result<types::meeting::get::ResponseBody, Self::ClientError> {
221 Ok(self
222 .execute(requests::meeting::get::Request {
223 body_id,
224 pagination,
225 })
226 .await?
227 .0)
228 }
229
230 async fn body_by_id_meeting_post(
231 &self,
232 body_id: BodyId,
233 payload: types::meeting::post::RequestBody,
234 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError> {
235 Ok(self
236 .execute(requests::meeting::post::Request { body_id, payload })
237 .await?
238 .0)
239 }
240
241 async fn body_by_id_meeting_by_id_get(
242 &self,
243 body_id: BodyId,
244 meeting_id: MeetingId,
245 ) -> Result<types::meeting::by_id::get::ResponseBody, Self::ClientError> {
246 let response = self
247 .execute(requests::meeting::by_id::get::Request {
248 body_id,
249 meeting_id,
250 })
251 .await?;
252 Ok(response.0)
253 }
254
255 async fn body_by_id_meeting_by_id_agenda_item_get(
256 &self,
257 body_id: BodyId,
258 meeting_id: MeetingId,
259 pagination: Pagination,
260 ) -> Result<types::agenda_item::get::ResponseBody, Self::ClientError> {
261 let response = self
262 .execute(requests::agenda_item::get::Request {
263 body_id,
264 meeting_id,
265 pagination,
266 })
267 .await?;
268 Ok(response.0)
269 }
270
271 async fn body_by_id_meeting_by_id_agenda_item_post(
272 &self,
273 body_id: BodyId,
274 meeting_id: MeetingId,
275 payload: types::agenda_item::post::RequestBody,
276 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError> {
277 Ok(self
278 .execute(requests::agenda_item::post::Request {
279 body_id,
280 meeting_id,
281 payload,
282 })
283 .await?
284 .0)
285 }
286
287 async fn body_by_id_meeting_by_id_agenda_item_by_id_get(
288 &self,
289 body_id: BodyId,
290 meeting_id: MeetingId,
291 agenda_item_id: AgendaItemId,
292 ) -> Result<types::agenda_item::by_id::get::ResponseBody, Self::ClientError> {
293 let response = self
294 .execute(requests::agenda_item::by_id::get::Request {
295 body_id,
296 meeting_id,
297 agenda_item_id,
298 })
299 .await?;
300 Ok(response.0)
301 }
302
303 async fn body_by_id_organization_get(
304 &self,
305 body_id: BodyId,
306 pagination: Pagination,
307 ) -> Result<types::organization::get::ResponseBody, Self::ClientError> {
308 Ok(self
309 .execute(requests::organization::get::Request {
310 body_id,
311 pagination,
312 })
313 .await?
314 .0)
315 }
316
317 async fn body_by_id_organization_post(
318 &self,
319 body_id: BodyId,
320 payload: types::organization::post::RequestBody,
321 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError> {
322 Ok(self
323 .execute(requests::organization::post::Request { body_id, payload })
324 .await?
325 .0)
326 }
327
328 async fn body_by_id_organization_by_id_get(
329 &self,
330 body_id: BodyId,
331 organization_id: OrganizationId,
332 ) -> Result<types::organization::by_id::get::ResponseBody, Self::ClientError> {
333 let response = self
334 .execute(requests::organization::by_id::get::Request {
335 body_id,
336 organization_id,
337 })
338 .await?;
339 Ok(response.0)
340 }
341
342 async fn body_by_id_person_get(
343 &self,
344 body_id: BodyId,
345 pagination: Pagination,
346 ) -> Result<types::person::get::ResponseBody, Self::ClientError> {
347 Ok(self
348 .execute(requests::person::get::Request {
349 body_id,
350 pagination,
351 })
352 .await?
353 .0)
354 }
355
356 async fn body_by_id_person_post(
357 &self,
358 body_id: BodyId,
359 payload: types::person::post::RequestBody,
360 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError> {
361 Ok(self
362 .execute(requests::person::post::Request { body_id, payload })
363 .await?
364 .0)
365 }
366
367 async fn body_by_id_person_by_id_get(
368 &self,
369 body_id: BodyId,
370 person_id: PersonId,
371 ) -> Result<types::person::by_id::get::ResponseBody, Self::ClientError> {
372 let response = self
373 .execute(requests::person::by_id::get::Request { body_id, person_id })
374 .await?;
375 Ok(response.0)
376 }
377
378 async fn me_profile_get(
379 &self,
380 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError> {
381 Ok(self.execute(requests::me::profile::get::Request).await?.0)
382 }
383
384 async fn me_profile_patch(
385 &self,
386 payload: types::me::profile::patch::RequestBody,
387 ) -> Result<types::me::profile::get::ResponseBody, Self::ClientError> {
388 Ok(self
389 .execute(requests::me::profile::patch::Request { payload })
390 .await?
391 .0)
392 }
393}