aws_smithy_runtime_api/client/connection/
establishment.rs1use std::sync::Arc;
7use std::time::Duration;
8
9#[derive(Clone, Debug, Eq, PartialEq)]
15#[non_exhaustive]
16pub struct ConnectionEstablishmentMetadata {
17 inner: Arc<ConnectionEstablishmentMetadataInner>,
18}
19
20#[derive(Debug, Eq, PartialEq)]
21struct ConnectionEstablishmentMetadataInner {
22 total_duration: Duration,
23 transport_duration: Duration,
24 protocol_handshake_duration: Option<Duration>,
25 dns_duration: Option<Duration>,
26 socket_connect_duration: Option<Duration>,
27 proxy_duration: Option<Duration>,
28 tls_duration: Option<Duration>,
29}
30
31impl ConnectionEstablishmentMetadata {
32 pub fn builder() -> ConnectionEstablishmentMetadataBuilder {
34 ConnectionEstablishmentMetadataBuilder::new()
35 }
36
37 pub fn total_duration(&self) -> Duration {
39 self.inner.total_duration
40 }
41
42 pub fn transport_duration(&self) -> Duration {
44 self.inner.transport_duration
45 }
46
47 pub fn protocol_handshake_duration(&self) -> Option<Duration> {
49 self.inner.protocol_handshake_duration
50 }
51
52 pub fn dns_duration(&self) -> Option<Duration> {
54 self.inner.dns_duration
55 }
56
57 pub fn socket_connect_duration(&self) -> Option<Duration> {
59 self.inner.socket_connect_duration
60 }
61
62 pub fn proxy_duration(&self) -> Option<Duration> {
64 self.inner.proxy_duration
65 }
66
67 pub fn tls_duration(&self) -> Option<Duration> {
69 self.inner.tls_duration
70 }
71}
72
73#[derive(Clone, Debug, Default)]
75pub struct ConnectionEstablishmentMetadataBuilder {
76 total_duration: Option<Duration>,
77 transport_duration: Option<Duration>,
78 protocol_handshake_duration: Option<Duration>,
79 dns_duration: Option<Duration>,
80 socket_connect_duration: Option<Duration>,
81 proxy_duration: Option<Duration>,
82 tls_duration: Option<Duration>,
83}
84
85impl ConnectionEstablishmentMetadataBuilder {
86 pub fn new() -> Self {
88 Self::default()
89 }
90
91 pub fn total_duration(mut self, duration: Duration) -> Self {
93 self.set_total_duration(Some(duration));
94 self
95 }
96
97 pub fn set_total_duration(&mut self, duration: Option<Duration>) -> &mut Self {
99 self.total_duration = duration;
100 self
101 }
102
103 pub fn transport_duration(mut self, duration: Duration) -> Self {
105 self.set_transport_duration(Some(duration));
106 self
107 }
108
109 pub fn set_transport_duration(&mut self, duration: Option<Duration>) -> &mut Self {
111 self.transport_duration = duration;
112 self
113 }
114
115 pub fn protocol_handshake_duration(mut self, duration: Duration) -> Self {
117 self.set_protocol_handshake_duration(Some(duration));
118 self
119 }
120
121 pub fn set_protocol_handshake_duration(&mut self, duration: Option<Duration>) -> &mut Self {
123 self.protocol_handshake_duration = duration;
124 self
125 }
126
127 pub fn dns_duration(mut self, duration: Duration) -> Self {
129 self.set_dns_duration(Some(duration));
130 self
131 }
132
133 pub fn set_dns_duration(&mut self, duration: Option<Duration>) -> &mut Self {
135 self.dns_duration = duration;
136 self
137 }
138
139 pub fn socket_connect_duration(mut self, duration: Duration) -> Self {
141 self.set_socket_connect_duration(Some(duration));
142 self
143 }
144
145 pub fn set_socket_connect_duration(&mut self, duration: Option<Duration>) -> &mut Self {
147 self.socket_connect_duration = duration;
148 self
149 }
150
151 pub fn proxy_duration(mut self, duration: Duration) -> Self {
153 self.set_proxy_duration(Some(duration));
154 self
155 }
156
157 pub fn set_proxy_duration(&mut self, duration: Option<Duration>) -> &mut Self {
159 self.proxy_duration = duration;
160 self
161 }
162
163 pub fn tls_duration(mut self, duration: Duration) -> Self {
165 self.set_tls_duration(Some(duration));
166 self
167 }
168
169 pub fn set_tls_duration(&mut self, duration: Option<Duration>) -> &mut Self {
171 self.tls_duration = duration;
172 self
173 }
174
175 pub fn build(self) -> ConnectionEstablishmentMetadata {
181 ConnectionEstablishmentMetadata {
182 inner: Arc::new(ConnectionEstablishmentMetadataInner {
183 total_duration: self
184 .total_duration
185 .expect("total_duration is required for connection establishment metadata"),
186 transport_duration: self
187 .transport_duration
188 .expect("transport_duration is required for connection establishment metadata"),
189 protocol_handshake_duration: self.protocol_handshake_duration,
190 dns_duration: self.dns_duration,
191 socket_connect_duration: self.socket_connect_duration,
192 proxy_duration: self.proxy_duration,
193 tls_duration: self.tls_duration,
194 }),
195 }
196 }
197}