drogue_client/discovery/v1/
data.rs

1use crate::serde::is_default;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
5pub struct CoapEndpoint {
6    pub url: String,
7}
8
9#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
10pub struct HttpEndpoint {
11    pub url: String,
12}
13
14#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
15pub struct MqttEndpoint {
16    pub host: String,
17    pub port: u16,
18}
19
20#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
21pub struct RegistryEndpoint {
22    pub url: String,
23}
24
25#[derive(Clone, Debug, Default, PartialEq, Eq, Deserialize, Serialize)]
26pub struct Endpoints {
27    #[serde(default, skip_serializing_if = "Option::is_none")]
28    pub api: Option<String>,
29    #[serde(default, skip_serializing_if = "Option::is_none")]
30    pub console: Option<String>,
31    #[serde(default, skip_serializing_if = "Option::is_none")]
32    pub coap: Option<CoapEndpoint>,
33    #[serde(default, skip_serializing_if = "Option::is_none")]
34    pub http: Option<HttpEndpoint>,
35    #[serde(default, skip_serializing_if = "Option::is_none")]
36    pub mqtt: Option<MqttEndpoint>,
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub mqtt_ws: Option<HttpEndpoint>,
39    #[serde(default, skip_serializing_if = "Option::is_none")]
40    pub mqtt_ws_browser: Option<HttpEndpoint>,
41    #[serde(default, skip_serializing_if = "Option::is_none")]
42    pub mqtt_integration: Option<MqttEndpoint>,
43    #[serde(default, skip_serializing_if = "Option::is_none")]
44    pub mqtt_integration_ws: Option<HttpEndpoint>,
45    #[serde(default, skip_serializing_if = "Option::is_none")]
46    pub mqtt_integration_ws_browser: Option<HttpEndpoint>,
47    #[serde(default, skip_serializing_if = "Option::is_none")]
48    pub websocket_integration: Option<HttpEndpoint>,
49    #[serde(default, skip_serializing_if = "Option::is_none")]
50    pub sso: Option<String>,
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub issuer_url: Option<String>,
53    #[serde(default, skip_serializing_if = "Option::is_none")]
54    pub redirect_url: Option<String>,
55    #[serde(default, skip_serializing_if = "Option::is_none")]
56    pub registry: Option<RegistryEndpoint>,
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub command_url: Option<String>,
59    #[serde(default, skip_serializing_if = "is_default")]
60    pub local_certs: bool,
61    #[serde(default, skip_serializing_if = "Option::is_none")]
62    pub kafka_bootstrap_servers: Option<String>,
63    #[serde(default, skip_serializing_if = "Vec::is_empty")]
64    pub demos: Vec<(String, String)>,
65}
66
67impl Endpoints {
68    /// The endpoint list visible for non-authenticated requests
69    pub fn publicize(&self) -> Endpoints {
70        Endpoints {
71            coap: None,
72            http: None,
73            mqtt: None,
74            mqtt_ws: None,
75            mqtt_ws_browser: None,
76            mqtt_integration: None,
77            mqtt_integration_ws: None,
78            mqtt_integration_ws_browser: None,
79            websocket_integration: None,
80            sso: self.sso.clone(),
81            api: self.api.clone(),
82            console: self.console.clone(),
83            issuer_url: self.issuer_url.clone(),
84            redirect_url: None,
85            registry: self.registry.clone(),
86            command_url: None,
87            kafka_bootstrap_servers: None,
88            local_certs: false,
89            demos: vec![],
90        }
91    }
92}
93
94/// This struct is a copy / paste from https://github.com/drogue-iot/drogue-cloud/blob/main/service-api/src/version.rs
95/// It can't really be moved here as it depends on drogue-cloud Cargo file to get a version number.
96/// So we just steal the struct to be able to deserialize it.
97#[derive(Clone, Debug, Serialize, Deserialize)]
98pub struct DrogueVersion {
99    pub version: String,
100}