use serde::{Deserialize, Serialize}; use std::fmt::{Display, Formatter}; use std::net::SocketAddr; use domo_proto::identifier::Identifier; #[derive(Debug, Serialize, Deserialize, Clone)] pub enum NodeType { #[serde(rename = "master")] Master { bind: SocketAddr, }, #[serde(rename = "relay")] Bridge { bind: SocketAddr, master_address: SocketAddr }, #[serde(rename = "subnet")] Subnet { master_address: String }, } impl Display for NodeType { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { NodeType::Master { .. } => write!(f, "master"), NodeType::Bridge { .. } => write!(f, "relay"), NodeType::Subnet { .. } => write!(f, "subnet"), } } } impl Default for NodeType { fn default() -> Self { Self::Master { bind: SocketAddr::from(([0,0,0,0], 4480)), } } } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct NodeConfig { #[serde(rename = "type")] pub node_type: NodeType, #[serde(default)] pub node_id: String } impl Default for NodeConfig { fn default() -> Self { Self { node_type: NodeType::default(), node_id: Identifier::random().to_string() } } }