use std::{
io::{self, ErrorKind::*},
net::{IpAddr, Ipv4Addr, SocketAddr},
};
#[cfg(doc)]
use crate::protocols::{self, Handshake, Reading, Writing};
#[derive(Debug, Clone)]
pub struct Config {
pub name: Option<String>,
pub listener_ip: Option<IpAddr>,
pub desired_listening_port: Option<u16>,
pub allow_random_port: bool,
pub fatal_io_errors: Vec<io::ErrorKind>,
pub max_connections: u16,
pub connection_timeout_ms: u16,
}
impl Config {
pub fn new(listener_address: SocketAddr, max_connections: u16) -> Self {
Self {
listener_ip: Some(listener_address.ip()),
desired_listening_port: Some(listener_address.port()),
max_connections,
..Default::default()
}
}
}
impl Default for Config {
fn default() -> Self {
fn default_ip() -> Option<IpAddr> {
Some(IpAddr::V4(Ipv4Addr::UNSPECIFIED))
}
Self {
name: None,
listener_ip: default_ip(),
desired_listening_port: None,
allow_random_port: true,
fatal_io_errors: vec![ConnectionReset, ConnectionAborted, BrokenPipe, InvalidData, UnexpectedEof],
max_connections: 100,
connection_timeout_ms: 3_000,
}
}
}