56 lines
1.3 KiB
Rust
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()
|
|
}
|
|
}
|
|
}
|