|
|
@@ -2,34 +2,24 @@ 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<Settings>;
|
|
|
|
|
|
/// Defines the network settings.
|
|
|
-#[derive(Clone, Debug, Deserialize, StructOpt)]
|
|
|
-#[structopt()]
|
|
|
+#[derive(Clone, Debug)]
|
|
|
pub struct Settings {
|
|
|
- #[structopt(short, long)]
|
|
|
pub inbound: Option<Url>,
|
|
|
- #[structopt(long, default_value = "0")]
|
|
|
pub outbound_connections: u32,
|
|
|
- #[structopt(long, default_value = "0")]
|
|
|
pub manual_attempt_limit: u32,
|
|
|
- #[structopt(long, default_value = "8")]
|
|
|
pub seed_query_timeout_seconds: u32,
|
|
|
- #[structopt(long, default_value = "10")]
|
|
|
pub connect_timeout_seconds: u32,
|
|
|
- #[structopt(long, default_value = "4")]
|
|
|
pub channel_handshake_seconds: u32,
|
|
|
- #[structopt(long, default_value = "10")]
|
|
|
pub channel_heartbeat_seconds: u32,
|
|
|
- #[structopt(short, long)]
|
|
|
pub external_addr: Option<Url>,
|
|
|
- #[structopt(short, long)]
|
|
|
pub peers: Vec<Url>,
|
|
|
- #[structopt(short, long)]
|
|
|
pub seeds: Vec<Url>,
|
|
|
}
|
|
|
|
|
|
@@ -49,3 +39,58 @@ impl Default for Settings {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+/// Defines the network settings.
|
|
|
+#[derive(Clone, Debug, Deserialize, StructOpt, StructOptToml)]
|
|
|
+#[structopt()]
|
|
|
+pub struct SettingsOpt {
|
|
|
+ /// P2P accept address
|
|
|
+ #[structopt(long = "accept")]
|
|
|
+ pub inbound: Option<Url>,
|
|
|
+
|
|
|
+ /// Connection slots
|
|
|
+ #[structopt(long = "slots")]
|
|
|
+ pub outbound_connections: Option<u32>,
|
|
|
+
|
|
|
+ /// P2P external address
|
|
|
+ #[structopt(long)]
|
|
|
+ pub external_addr: Option<Url>,
|
|
|
+
|
|
|
+ /// Peer nodes to connect to
|
|
|
+ #[serde(default)]
|
|
|
+ #[structopt(long)]
|
|
|
+ pub peers: Vec<Url>,
|
|
|
+
|
|
|
+ /// Seed nodes to connect to
|
|
|
+ #[serde(default)]
|
|
|
+ #[structopt(long)]
|
|
|
+ pub seeds: Vec<Url>,
|
|
|
+
|
|
|
+ #[structopt(skip)]
|
|
|
+ pub manual_attempt_limit: Option<u32>,
|
|
|
+ #[structopt(skip)]
|
|
|
+ pub seed_query_timeout_seconds: Option<u32>,
|
|
|
+ #[structopt(skip)]
|
|
|
+ pub connect_timeout_seconds: Option<u32>,
|
|
|
+ #[structopt(skip)]
|
|
|
+ pub channel_handshake_seconds: Option<u32>,
|
|
|
+ #[structopt(skip)]
|
|
|
+ pub channel_heartbeat_seconds: Option<u32>,
|
|
|
+}
|
|
|
+
|
|
|
+impl Into<Settings> for SettingsOpt {
|
|
|
+ fn into(self) -> Settings {
|
|
|
+ Settings {
|
|
|
+ inbound: self.inbound,
|
|
|
+ outbound_connections: self.outbound_connections.unwrap_or(0),
|
|
|
+ manual_attempt_limit: self.manual_attempt_limit.unwrap_or(0),
|
|
|
+ seed_query_timeout_seconds: self.seed_query_timeout_seconds.unwrap_or(8),
|
|
|
+ connect_timeout_seconds: self.connect_timeout_seconds.unwrap_or(10),
|
|
|
+ channel_handshake_seconds: self.channel_handshake_seconds.unwrap_or(4),
|
|
|
+ channel_heartbeat_seconds: self.channel_heartbeat_seconds.unwrap_or(10),
|
|
|
+ external_addr: self.external_addr,
|
|
|
+ peers: self.peers,
|
|
|
+ seeds: self.seeds,
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|