1use super::{Error, configuration};
12use crate::apis::ContentType;
13use crate::{apis::ResponseContent, models};
14use async_trait::async_trait;
15#[cfg(feature = "mockall")]
16use mockall::automock;
17use reqwest;
18use serde::{Deserialize, Serialize, de::Error as _};
19use std::sync::Arc;
20
21#[cfg_attr(feature = "mockall", automock)]
22#[async_trait]
23pub trait LinksApi: Send + Sync {
24 async fn get_item_link<'item_name, 'channel_uid>(
28 &self,
29 item_name: &'item_name str,
30 channel_uid: &'channel_uid str,
31 ) -> Result<models::EnrichedItemChannelLinkDto, Error<GetItemLinkError>>;
32
33 async fn get_item_links<'channel_uid, 'item_name>(
37 &self,
38 channel_uid: Option<&'channel_uid str>,
39 item_name: Option<&'item_name str>,
40 ) -> Result<Vec<models::EnrichedItemChannelLinkDto>, Error<GetItemLinksError>>;
41
42 async fn get_orphan_links(&self) -> Result<(), Error<GetOrphanLinksError>>;
46
47 async fn link_item_to_channel<'item_name, 'channel_uid, 'item_channel_link_dto>(
51 &self,
52 item_name: &'item_name str,
53 channel_uid: &'channel_uid str,
54 item_channel_link_dto: Option<models::ItemChannelLinkDto>,
55 ) -> Result<(), Error<LinkItemToChannelError>>;
56
57 async fn purge_database1(&self) -> Result<(), Error<PurgeDatabase1Error>>;
61
62 async fn remove_all_links_for_object<'object>(
66 &self,
67 object: &'object str,
68 ) -> Result<(), Error<RemoveAllLinksForObjectError>>;
69
70 async fn unlink_item_from_channel<'item_name, 'channel_uid>(
74 &self,
75 item_name: &'item_name str,
76 channel_uid: &'channel_uid str,
77 ) -> Result<(), Error<UnlinkItemFromChannelError>>;
78}
79
80pub struct LinksApiClient {
81 configuration: Arc<configuration::Configuration>,
82}
83
84impl LinksApiClient {
85 pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
86 Self { configuration }
87 }
88}
89
90#[async_trait]
91impl LinksApi for LinksApiClient {
92 async fn get_item_link<'item_name, 'channel_uid>(
93 &self,
94 item_name: &'item_name str,
95 channel_uid: &'channel_uid str,
96 ) -> Result<models::EnrichedItemChannelLinkDto, Error<GetItemLinkError>> {
97 let local_var_configuration = &self.configuration;
98
99 let local_var_client = &local_var_configuration.client;
100
101 let local_var_uri_str = format!(
102 "{}/links/{itemName}/{channelUID}",
103 local_var_configuration.base_path,
104 itemName = crate::apis::urlencode(item_name),
105 channelUID = crate::apis::urlencode(channel_uid)
106 );
107 let mut local_var_req_builder =
108 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
109
110 if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
111 local_var_req_builder = local_var_req_builder
112 .header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
113 }
114 if let Some(ref local_var_auth_conf) = local_var_configuration.basic_auth {
115 local_var_req_builder = local_var_req_builder.basic_auth(
116 local_var_auth_conf.0.to_owned(),
117 local_var_auth_conf.1.to_owned(),
118 );
119 };
120 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
121 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
122 };
123
124 let local_var_req = local_var_req_builder.build()?;
125 let local_var_resp = local_var_client.execute(local_var_req).await?;
126
127 let local_var_status = local_var_resp.status();
128 let local_var_content_type = local_var_resp
129 .headers()
130 .get("content-type")
131 .and_then(|v| v.to_str().ok())
132 .unwrap_or("application/octet-stream");
133 let local_var_content_type = super::ContentType::from(local_var_content_type);
134 let local_var_content = local_var_resp.text().await?;
135
136 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
137 match local_var_content_type {
138 ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from),
139 ContentType::Text => {
140 return Err(Error::from(serde_json::Error::custom(
141 "Received `text/plain` content type response that cannot be converted to `models::EnrichedItemChannelLinkDto`",
142 )));
143 }
144 ContentType::Unsupported(local_var_unknown_type) => {
145 return Err(Error::from(serde_json::Error::custom(format!(
146 "Received `{local_var_unknown_type}` content type response that cannot be converted to `models::EnrichedItemChannelLinkDto`"
147 ))));
148 }
149 }
150 } else {
151 let local_var_entity: Option<GetItemLinkError> =
152 serde_json::from_str(&local_var_content).ok();
153 let local_var_error = ResponseContent {
154 status: local_var_status,
155 content: local_var_content,
156 entity: local_var_entity,
157 };
158 Err(Error::ResponseError(local_var_error))
159 }
160 }
161
162 async fn get_item_links<'channel_uid, 'item_name>(
163 &self,
164 channel_uid: Option<&'channel_uid str>,
165 item_name: Option<&'item_name str>,
166 ) -> Result<Vec<models::EnrichedItemChannelLinkDto>, Error<GetItemLinksError>> {
167 let local_var_configuration = &self.configuration;
168
169 let local_var_client = &local_var_configuration.client;
170
171 let local_var_uri_str = format!("{}/links", local_var_configuration.base_path);
172 let mut local_var_req_builder =
173 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
174
175 if let Some(ref local_var_str) = channel_uid {
176 local_var_req_builder =
177 local_var_req_builder.query(&[("channelUID", &local_var_str.to_string())]);
178 }
179 if let Some(ref local_var_str) = item_name {
180 local_var_req_builder =
181 local_var_req_builder.query(&[("itemName", &local_var_str.to_string())]);
182 }
183 if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
184 local_var_req_builder = local_var_req_builder
185 .header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
186 }
187 if let Some(ref local_var_auth_conf) = local_var_configuration.basic_auth {
188 local_var_req_builder = local_var_req_builder.basic_auth(
189 local_var_auth_conf.0.to_owned(),
190 local_var_auth_conf.1.to_owned(),
191 );
192 };
193 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
194 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
195 };
196
197 let local_var_req = local_var_req_builder.build()?;
198 let local_var_resp = local_var_client.execute(local_var_req).await?;
199
200 let local_var_status = local_var_resp.status();
201 let local_var_content_type = local_var_resp
202 .headers()
203 .get("content-type")
204 .and_then(|v| v.to_str().ok())
205 .unwrap_or("application/octet-stream");
206 let local_var_content_type = super::ContentType::from(local_var_content_type);
207 let local_var_content = local_var_resp.text().await?;
208
209 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
210 match local_var_content_type {
211 ContentType::Json => serde_json::from_str(&local_var_content).map_err(Error::from),
212 ContentType::Text => {
213 return Err(Error::from(serde_json::Error::custom(
214 "Received `text/plain` content type response that cannot be converted to `Vec<models::EnrichedItemChannelLinkDto>`",
215 )));
216 }
217 ContentType::Unsupported(local_var_unknown_type) => {
218 return Err(Error::from(serde_json::Error::custom(format!(
219 "Received `{local_var_unknown_type}` content type response that cannot be converted to `Vec<models::EnrichedItemChannelLinkDto>`"
220 ))));
221 }
222 }
223 } else {
224 let local_var_entity: Option<GetItemLinksError> =
225 serde_json::from_str(&local_var_content).ok();
226 let local_var_error = ResponseContent {
227 status: local_var_status,
228 content: local_var_content,
229 entity: local_var_entity,
230 };
231 Err(Error::ResponseError(local_var_error))
232 }
233 }
234
235 async fn get_orphan_links(&self) -> Result<(), Error<GetOrphanLinksError>> {
236 let local_var_configuration = &self.configuration;
237
238 let local_var_client = &local_var_configuration.client;
239
240 let local_var_uri_str = format!("{}/links/orphans", local_var_configuration.base_path);
241 let mut local_var_req_builder =
242 local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());
243
244 if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
245 local_var_req_builder = local_var_req_builder
246 .header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
247 }
248 if let Some(ref local_var_auth_conf) = local_var_configuration.basic_auth {
249 local_var_req_builder = local_var_req_builder.basic_auth(
250 local_var_auth_conf.0.to_owned(),
251 local_var_auth_conf.1.to_owned(),
252 );
253 };
254 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
255 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
256 };
257
258 let local_var_req = local_var_req_builder.build()?;
259 let local_var_resp = local_var_client.execute(local_var_req).await?;
260
261 let local_var_status = local_var_resp.status();
262 let local_var_content = local_var_resp.text().await?;
263
264 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
265 Ok(())
266 } else {
267 let local_var_entity: Option<GetOrphanLinksError> =
268 serde_json::from_str(&local_var_content).ok();
269 let local_var_error = ResponseContent {
270 status: local_var_status,
271 content: local_var_content,
272 entity: local_var_entity,
273 };
274 Err(Error::ResponseError(local_var_error))
275 }
276 }
277
278 async fn link_item_to_channel<'item_name, 'channel_uid, 'item_channel_link_dto>(
279 &self,
280 item_name: &'item_name str,
281 channel_uid: &'channel_uid str,
282 item_channel_link_dto: Option<models::ItemChannelLinkDto>,
283 ) -> Result<(), Error<LinkItemToChannelError>> {
284 let local_var_configuration = &self.configuration;
285
286 let local_var_client = &local_var_configuration.client;
287
288 let local_var_uri_str = format!(
289 "{}/links/{itemName}/{channelUID}",
290 local_var_configuration.base_path,
291 itemName = crate::apis::urlencode(item_name),
292 channelUID = crate::apis::urlencode(channel_uid)
293 );
294 let mut local_var_req_builder =
295 local_var_client.request(reqwest::Method::PUT, local_var_uri_str.as_str());
296
297 if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
298 local_var_req_builder = local_var_req_builder
299 .header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
300 }
301 if let Some(ref local_var_auth_conf) = local_var_configuration.basic_auth {
302 local_var_req_builder = local_var_req_builder.basic_auth(
303 local_var_auth_conf.0.to_owned(),
304 local_var_auth_conf.1.to_owned(),
305 );
306 };
307 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
308 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
309 };
310 local_var_req_builder = local_var_req_builder.json(&item_channel_link_dto);
311
312 let local_var_req = local_var_req_builder.build()?;
313 let local_var_resp = local_var_client.execute(local_var_req).await?;
314
315 let local_var_status = local_var_resp.status();
316 let local_var_content = local_var_resp.text().await?;
317
318 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
319 Ok(())
320 } else {
321 let local_var_entity: Option<LinkItemToChannelError> =
322 serde_json::from_str(&local_var_content).ok();
323 let local_var_error = ResponseContent {
324 status: local_var_status,
325 content: local_var_content,
326 entity: local_var_entity,
327 };
328 Err(Error::ResponseError(local_var_error))
329 }
330 }
331
332 async fn purge_database1(&self) -> Result<(), Error<PurgeDatabase1Error>> {
333 let local_var_configuration = &self.configuration;
334
335 let local_var_client = &local_var_configuration.client;
336
337 let local_var_uri_str = format!("{}/links/purge", local_var_configuration.base_path);
338 let mut local_var_req_builder =
339 local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());
340
341 if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
342 local_var_req_builder = local_var_req_builder
343 .header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
344 }
345 if let Some(ref local_var_auth_conf) = local_var_configuration.basic_auth {
346 local_var_req_builder = local_var_req_builder.basic_auth(
347 local_var_auth_conf.0.to_owned(),
348 local_var_auth_conf.1.to_owned(),
349 );
350 };
351 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
352 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
353 };
354
355 let local_var_req = local_var_req_builder.build()?;
356 let local_var_resp = local_var_client.execute(local_var_req).await?;
357
358 let local_var_status = local_var_resp.status();
359 let local_var_content = local_var_resp.text().await?;
360
361 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
362 Ok(())
363 } else {
364 let local_var_entity: Option<PurgeDatabase1Error> =
365 serde_json::from_str(&local_var_content).ok();
366 let local_var_error = ResponseContent {
367 status: local_var_status,
368 content: local_var_content,
369 entity: local_var_entity,
370 };
371 Err(Error::ResponseError(local_var_error))
372 }
373 }
374
375 async fn remove_all_links_for_object<'object>(
376 &self,
377 object: &'object str,
378 ) -> Result<(), Error<RemoveAllLinksForObjectError>> {
379 let local_var_configuration = &self.configuration;
380
381 let local_var_client = &local_var_configuration.client;
382
383 let local_var_uri_str = format!(
384 "{}/links/{object}",
385 local_var_configuration.base_path,
386 object = crate::apis::urlencode(object)
387 );
388 let mut local_var_req_builder =
389 local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
390
391 if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
392 local_var_req_builder = local_var_req_builder
393 .header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
394 }
395 if let Some(ref local_var_auth_conf) = local_var_configuration.basic_auth {
396 local_var_req_builder = local_var_req_builder.basic_auth(
397 local_var_auth_conf.0.to_owned(),
398 local_var_auth_conf.1.to_owned(),
399 );
400 };
401 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
402 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
403 };
404
405 let local_var_req = local_var_req_builder.build()?;
406 let local_var_resp = local_var_client.execute(local_var_req).await?;
407
408 let local_var_status = local_var_resp.status();
409 let local_var_content = local_var_resp.text().await?;
410
411 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
412 Ok(())
413 } else {
414 let local_var_entity: Option<RemoveAllLinksForObjectError> =
415 serde_json::from_str(&local_var_content).ok();
416 let local_var_error = ResponseContent {
417 status: local_var_status,
418 content: local_var_content,
419 entity: local_var_entity,
420 };
421 Err(Error::ResponseError(local_var_error))
422 }
423 }
424
425 async fn unlink_item_from_channel<'item_name, 'channel_uid>(
426 &self,
427 item_name: &'item_name str,
428 channel_uid: &'channel_uid str,
429 ) -> Result<(), Error<UnlinkItemFromChannelError>> {
430 let local_var_configuration = &self.configuration;
431
432 let local_var_client = &local_var_configuration.client;
433
434 let local_var_uri_str = format!(
435 "{}/links/{itemName}/{channelUID}",
436 local_var_configuration.base_path,
437 itemName = crate::apis::urlencode(item_name),
438 channelUID = crate::apis::urlencode(channel_uid)
439 );
440 let mut local_var_req_builder =
441 local_var_client.request(reqwest::Method::DELETE, local_var_uri_str.as_str());
442
443 if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
444 local_var_req_builder = local_var_req_builder
445 .header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
446 }
447 if let Some(ref local_var_auth_conf) = local_var_configuration.basic_auth {
448 local_var_req_builder = local_var_req_builder.basic_auth(
449 local_var_auth_conf.0.to_owned(),
450 local_var_auth_conf.1.to_owned(),
451 );
452 };
453 if let Some(ref local_var_token) = local_var_configuration.oauth_access_token {
454 local_var_req_builder = local_var_req_builder.bearer_auth(local_var_token.to_owned());
455 };
456
457 let local_var_req = local_var_req_builder.build()?;
458 let local_var_resp = local_var_client.execute(local_var_req).await?;
459
460 let local_var_status = local_var_resp.status();
461 let local_var_content = local_var_resp.text().await?;
462
463 if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
464 Ok(())
465 } else {
466 let local_var_entity: Option<UnlinkItemFromChannelError> =
467 serde_json::from_str(&local_var_content).ok();
468 let local_var_error = ResponseContent {
469 status: local_var_status,
470 content: local_var_content,
471 entity: local_var_entity,
472 };
473 Err(Error::ResponseError(local_var_error))
474 }
475 }
476}
477
478#[derive(Debug, Clone, Serialize, Deserialize)]
480#[serde(untagged)]
481pub enum GetItemLinkError {
482 Status404(),
483 UnknownValue(serde_json::Value),
484}
485
486#[derive(Debug, Clone, Serialize, Deserialize)]
488#[serde(untagged)]
489pub enum GetItemLinksError {
490 UnknownValue(serde_json::Value),
491}
492
493#[derive(Debug, Clone, Serialize, Deserialize)]
495#[serde(untagged)]
496pub enum GetOrphanLinksError {
497 UnknownValue(serde_json::Value),
498}
499
500#[derive(Debug, Clone, Serialize, Deserialize)]
502#[serde(untagged)]
503pub enum LinkItemToChannelError {
504 Status400(),
505 Status405(),
506 UnknownValue(serde_json::Value),
507}
508
509#[derive(Debug, Clone, Serialize, Deserialize)]
511#[serde(untagged)]
512pub enum PurgeDatabase1Error {
513 UnknownValue(serde_json::Value),
514}
515
516#[derive(Debug, Clone, Serialize, Deserialize)]
518#[serde(untagged)]
519pub enum RemoveAllLinksForObjectError {
520 UnknownValue(serde_json::Value),
521}
522
523#[derive(Debug, Clone, Serialize, Deserialize)]
525#[serde(untagged)]
526pub enum UnlinkItemFromChannelError {
527 Status404(),
528 Status405(),
529 UnknownValue(serde_json::Value),
530}