domo/domo_node/src/config/node.rs
2023-11-05 20:52:42 +01:00

56 lines
1.3 KiB
Rust

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()
}
}
}