use std::sync::Arc; use serde::Deserialize; use structopt::StructOpt; use structopt_toml::StructOptToml; use url::Url; /// Atomic pointer to network settings. pub type SettingsPtr = Arc; /// Defines the network settings. #[derive(Clone, Debug)] pub struct Settings { pub inbound: Option, pub outbound_connections: u32, pub manual_attempt_limit: u32, pub seed_query_timeout_seconds: u32, pub connect_timeout_seconds: u32, pub channel_handshake_seconds: u32, pub channel_heartbeat_seconds: u32, pub external_addr: Option, pub peers: Vec, pub seeds: Vec, } impl Default for Settings { fn default() -> Self { Self { inbound: None, outbound_connections: 0, manual_attempt_limit: 0, seed_query_timeout_seconds: 8, connect_timeout_seconds: 10, channel_handshake_seconds: 4, channel_heartbeat_seconds: 10, external_addr: None, peers: Vec::new(), seeds: Vec::new(), } } } /// Defines the network settings. #[derive(Clone, Debug, Deserialize, StructOpt, StructOptToml)] #[structopt()] pub struct SettingsOpt { /// P2P accept address #[structopt(long = "accept")] pub inbound: Option, /// Connection slots #[structopt(long = "slots")] pub outbound_connections: Option, /// P2P external address #[structopt(long)] pub external_addr: Option, /// Peer nodes to connect to #[serde(default)] #[structopt(long)] pub peers: Vec, /// Seed nodes to connect to #[serde(default)] #[structopt(long)] pub seeds: Vec, #[structopt(skip)] pub manual_attempt_limit: Option, #[structopt(skip)] pub seed_query_timeout_seconds: Option, #[structopt(skip)] pub connect_timeout_seconds: Option, #[structopt(skip)] pub channel_handshake_seconds: Option, #[structopt(skip)] pub channel_heartbeat_seconds: Option, } impl From for Settings { fn from(settings_opt: SettingsOpt) -> Self { Self { inbound: settings_opt.inbound, outbound_connections: settings_opt.outbound_connections.unwrap_or(0), manual_attempt_limit: settings_opt.manual_attempt_limit.unwrap_or(0), seed_query_timeout_seconds: settings_opt.seed_query_timeout_seconds.unwrap_or(8), connect_timeout_seconds: settings_opt.connect_timeout_seconds.unwrap_or(10), channel_handshake_seconds: settings_opt.channel_handshake_seconds.unwrap_or(4), channel_heartbeat_seconds: settings_opt.channel_heartbeat_seconds.unwrap_or(10), external_addr: settings_opt.external_addr, peers: settings_opt.peers, seeds: settings_opt.seeds, } } }