use crate::{IpAddrFamily, ResolveMethod};
use std::time::Duration;
pub struct Builder {
resolve_method: ResolveMethod,
addr_family: IpAddrFamily,
timeout: Duration,
ttl: Duration,
}
impl Builder {
#[must_use]
pub fn new() -> Self {
Self {
resolve_method: Config::default().resolve_method,
addr_family: Config::default().addr_family,
timeout: Config::default().timeout,
ttl: Config::default().ttl,
}
}
#[must_use]
pub const fn resolve_method(self, resolve_method: ResolveMethod) -> Self {
Self {
resolve_method,
..self
}
}
#[must_use]
pub const fn addr_family(self, addr_family: IpAddrFamily) -> Self {
Self {
addr_family,
..self
}
}
#[must_use]
pub const fn timeout(self, timeout: Duration) -> Self {
Self { timeout, ..self }
}
#[must_use]
pub const fn ttl(self, ttl: Duration) -> Self {
Self { ttl, ..self }
}
#[must_use]
pub const fn build(self) -> Config {
Config {
resolve_method: self.resolve_method,
addr_family: self.addr_family,
timeout: self.timeout,
ttl: self.ttl,
}
}
}
impl Default for Builder {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Copy, Clone)]
pub struct Config {
pub resolve_method: ResolveMethod,
pub addr_family: IpAddrFamily,
pub timeout: Duration,
pub ttl: Duration,
}
impl Config {
#[must_use]
pub const fn new(
resolve_method: ResolveMethod,
addr_family: IpAddrFamily,
timeout: Duration,
ttl: Duration,
) -> Self {
Self {
resolve_method,
addr_family,
timeout,
ttl,
}
}
}
impl Default for Config {
fn default() -> Self {
Self {
resolve_method: ResolveMethod::System,
addr_family: IpAddrFamily::Ipv4thenIpv6,
timeout: Duration::from_millis(5000),
ttl: Duration::from_secs(300),
}
}
}