1use crate::{IpAddrFamily, ResolveMethod};
2use std::time::Duration;
3
4pub struct Builder {
15 resolve_method: ResolveMethod,
16 addr_family: IpAddrFamily,
17 timeout: Duration,
18 ttl: Duration,
19}
20
21impl Builder {
22 #[must_use]
24 pub fn new() -> Self {
25 Self {
26 resolve_method: Config::default().resolve_method,
27 addr_family: Config::default().addr_family,
28 timeout: Config::default().timeout,
29 ttl: Config::default().ttl,
30 }
31 }
32
33 #[must_use]
35 pub const fn resolve_method(self, resolve_method: ResolveMethod) -> Self {
36 Self {
37 resolve_method,
38 ..self
39 }
40 }
41
42 #[must_use]
44 pub const fn addr_family(self, addr_family: IpAddrFamily) -> Self {
45 Self {
46 addr_family,
47 ..self
48 }
49 }
50
51 #[must_use]
53 pub const fn timeout(self, timeout: Duration) -> Self {
54 Self { timeout, ..self }
55 }
56
57 #[must_use]
59 pub const fn ttl(self, ttl: Duration) -> Self {
60 Self { ttl, ..self }
61 }
62
63 #[must_use]
65 pub const fn build(self) -> Config {
66 Config {
67 resolve_method: self.resolve_method,
68 addr_family: self.addr_family,
69 timeout: self.timeout,
70 ttl: self.ttl,
71 }
72 }
73}
74
75impl Default for Builder {
76 fn default() -> Self {
77 Self::new()
78 }
79}
80
81#[derive(Debug, Copy, Clone)]
83pub struct Config {
84 pub resolve_method: ResolveMethod,
86 pub addr_family: IpAddrFamily,
88 pub timeout: Duration,
90 pub ttl: Duration,
92}
93
94impl Config {
95 #[must_use]
97 pub const fn new(
98 resolve_method: ResolveMethod,
99 addr_family: IpAddrFamily,
100 timeout: Duration,
101 ttl: Duration,
102 ) -> Self {
103 Self {
104 resolve_method,
105 addr_family,
106 timeout,
107 ttl,
108 }
109 }
110}
111
112impl Default for Config {
113 fn default() -> Self {
114 Self {
115 resolve_method: ResolveMethod::System,
116 addr_family: IpAddrFamily::Ipv4thenIpv6,
117 timeout: Duration::from_millis(5000),
118 ttl: Duration::from_secs(300),
119 }
120 }
121}