use std::net::IpAddr;
use std::net::Ipv4Addr;
use std::net::SocketAddr;
use std::time::Duration;
#[derive(Clone, Copy)]
pub struct NodeOptions {
pub(crate) listen_address: SocketAddr,
pub(crate) broadcast_address: SocketAddr,
pub(crate) handshake_timeout: Duration,
pub(crate) heartbeat_interval: Duration,
pub(crate) heartbeat_timeout: Duration,
}
impl NodeOptions {
pub const fn new() -> Self {
Self {
listen_address: SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 1337),
broadcast_address: SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 1337),
handshake_timeout: Duration::from_secs(5),
heartbeat_interval: Duration::from_secs(5),
heartbeat_timeout: Duration::from_secs(45),
}
}
pub fn listen_address<T: Into<SocketAddr>>(mut self, address: T) -> Self {
self.listen_address = address.into();
self
}
pub fn broadcast_address<T: Into<SocketAddr>>(mut self, address: T) -> Self {
self.broadcast_address = address.into();
self
}
pub fn handshake_timeout(mut self, duration: Duration) -> Self {
self.handshake_timeout = duration;
self
}
pub fn heartbeat_interval(mut self, duration: Duration) -> Self {
self.heartbeat_interval = duration;
self
}
pub fn heartbeat_timeout(mut self, duration: Duration) -> Self {
self.handshake_timeout = duration;
self
}
}
impl Default for NodeOptions {
fn default() -> Self {
Self::new()
}
}