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