hab_rs_api_client/apis/
links_api.rs

1/*
2 * openHAB REST API
3 *
4 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5 *
6 * The version of the OpenAPI document: 8
7 *
8 * Generated by: https://openapi-generator.tech
9 */
10
11use 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    /// GET /links/{itemName}/{channelUID}
25    ///
26    ///
27    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    /// GET /links
34    ///
35    ///
36    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    /// GET /links/orphans
43    ///
44    ///
45    async fn get_orphan_links(&self) -> Result<(), Error<GetOrphanLinksError>>;
46
47    /// PUT /links/{itemName}/{channelUID}
48    ///
49    ///
50    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    /// POST /links/purge
58    ///
59    ///
60    async fn purge_database1(&self) -> Result<(), Error<PurgeDatabase1Error>>;
61
62    /// DELETE /links/{object}
63    ///
64    ///
65    async fn remove_all_links_for_object<'object>(
66        &self,
67        object: &'object str,
68    ) -> Result<(), Error<RemoveAllLinksForObjectError>>;
69
70    /// DELETE /links/{itemName}/{channelUID}
71    ///
72    ///
73    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&lt;models::EnrichedItemChannelLinkDto&gt;`",
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&lt;models::EnrichedItemChannelLinkDto&gt;`"
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/// struct for typed errors of method [LinksApi::get_item_link]
479#[derive(Debug, Clone, Serialize, Deserialize)]
480#[serde(untagged)]
481pub enum GetItemLinkError {
482    Status404(),
483    UnknownValue(serde_json::Value),
484}
485
486/// struct for typed errors of method [LinksApi::get_item_links]
487#[derive(Debug, Clone, Serialize, Deserialize)]
488#[serde(untagged)]
489pub enum GetItemLinksError {
490    UnknownValue(serde_json::Value),
491}
492
493/// struct for typed errors of method [LinksApi::get_orphan_links]
494#[derive(Debug, Clone, Serialize, Deserialize)]
495#[serde(untagged)]
496pub enum GetOrphanLinksError {
497    UnknownValue(serde_json::Value),
498}
499
500/// struct for typed errors of method [LinksApi::link_item_to_channel]
501#[derive(Debug, Clone, Serialize, Deserialize)]
502#[serde(untagged)]
503pub enum LinkItemToChannelError {
504    Status400(),
505    Status405(),
506    UnknownValue(serde_json::Value),
507}
508
509/// struct for typed errors of method [LinksApi::purge_database1]
510#[derive(Debug, Clone, Serialize, Deserialize)]
511#[serde(untagged)]
512pub enum PurgeDatabase1Error {
513    UnknownValue(serde_json::Value),
514}
515
516/// struct for typed errors of method [LinksApi::remove_all_links_for_object]
517#[derive(Debug, Clone, Serialize, Deserialize)]
518#[serde(untagged)]
519pub enum RemoveAllLinksForObjectError {
520    UnknownValue(serde_json::Value),
521}
522
523/// struct for typed errors of method [LinksApi::unlink_item_from_channel]
524#[derive(Debug, Clone, Serialize, Deserialize)]
525#[serde(untagged)]
526pub enum UnlinkItemFromChannelError {
527    Status404(),
528    Status405(),
529    UnknownValue(serde_json::Value),
530}