use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, PartialEq, Debug, Default)]
pub struct V1Discovery {
pub endpoints: HashMap<String, V1DiscoveryEndpoint>,
pub server: V1DiscoveryServer,
}
impl V1Discovery {
pub fn builder() -> V1DiscoveryBuilder {
V1DiscoveryBuilder::default()
}
pub fn get_v1_http_endpoint(&self) -> Option<String> {
if let Some(end) = self.endpoints.get("v1") {
end.signalk_http.as_ref().cloned()
} else {
None
}
}
pub fn get_v1_ws_endpoint(&self) -> Option<String> {
if let Some(end) = self.endpoints.get("v1") {
end.signalk_ws.as_ref().cloned()
} else {
None
}
}
}
#[derive(Default)]
pub struct V1DiscoveryBuilder {
endpoints: HashMap<String, V1DiscoveryEndpoint>,
server: V1DiscoveryServer,
}
impl V1DiscoveryBuilder {
pub fn server(mut self, value: V1DiscoveryServer) -> V1DiscoveryBuilder {
self.server = value;
self
}
pub fn endpoint(mut self, key: String, value: V1DiscoveryEndpoint) -> V1DiscoveryBuilder {
self.endpoints.insert(key, value);
self
}
pub fn build(self) -> V1Discovery {
V1Discovery {
endpoints: self.endpoints,
server: self.server,
}
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Default)]
pub struct V1DiscoveryEndpoint {
pub version: String,
#[serde(rename = "signalk-http")]
pub signalk_http: Option<String>,
#[serde(rename = "signalk-ws")]
pub signalk_ws: Option<String>,
#[serde(rename = "signalk-tcp")]
pub signalk_tcp: Option<String>, }
impl V1DiscoveryEndpoint {
pub fn builder() -> V1DiscoveryEndpointBuilder {
V1DiscoveryEndpointBuilder::default()
}
}
#[derive(Default)]
pub struct V1DiscoveryEndpointBuilder {
version: String,
signalk_http: Option<String>,
signalk_ws: Option<String>,
signalk_tcp: Option<String>,
}
impl V1DiscoveryEndpointBuilder {
pub fn version(mut self, value: String) -> V1DiscoveryEndpointBuilder {
self.version = value;
self
}
pub fn signalk_http(mut self, value: String) -> V1DiscoveryEndpointBuilder {
self.signalk_http = Some(value);
self
}
pub fn signalk_ws(mut self, value: String) -> V1DiscoveryEndpointBuilder {
self.signalk_ws = Some(value);
self
}
pub fn signalk_tcp(mut self, value: String) -> V1DiscoveryEndpointBuilder {
self.signalk_tcp = Some(value);
self
}
pub fn build(self) -> V1DiscoveryEndpoint {
V1DiscoveryEndpoint {
version: self.version,
signalk_http: self.signalk_http,
signalk_ws: self.signalk_ws,
signalk_tcp: self.signalk_tcp,
}
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Default)]
pub struct V1DiscoveryServer {
pub id: String,
pub version: String,
}
impl V1DiscoveryServer {
pub fn new(id: String, version: String) -> Self {
Self { id, version }
}
}