@@ -62,7 +62,7 @@ use crate::{
6262 client:: { HttpClient , connect:: TcpConnectOptions , options:: TransportOptions } ,
6363 rt:: { TokioExecutor , tokio:: TokioTimer } ,
6464 } ,
65- dns:: { DnsResolverWithOverrides , DynResolver , GaiResolver , Resolve } ,
65+ dns:: { DnsResolverWithOverrides , DynResolver , GaiResolver , IntoResolve , Resolve } ,
6666 error:: { self , BoxError , Error } ,
6767 header:: OrigHeaderMap ,
6868 http1:: Http1Options ,
@@ -250,10 +250,9 @@ impl ClientBuilder {
250250 }
251251 let proxies = Arc :: new ( proxies) ;
252252
253- // Into parts for transport options
254253 let ( tls_options, http1_options, http2_options) = config. transport_options . into_parts ( ) ;
255254
256- // Create the TLS connector with the provided options.
255+ // create the TLS connector with the provided options.
257256 let connector = {
258257 let resolver = {
259258 let mut resolver: Arc < dyn Resolve > = match config. dns_resolver {
@@ -272,7 +271,7 @@ impl ClientBuilder {
272271 DynResolver :: new ( resolver)
273272 } ;
274273
275- // Apply http connector options
274+ // configured http connector options
276275 let http = |http : & mut HttpConnector | {
277276 http. enforce_http ( false ) ;
278277 http. set_keepalive ( config. tcp_keepalive ) ;
@@ -289,7 +288,7 @@ impl ClientBuilder {
289288 http. set_tcp_user_timeout ( config. tcp_user_timeout ) ;
290289 } ;
291290
292- // Apply tls connector options
291+ // configured tls connector options
293292 let tls = |tls : TlsConnectorBuilder | {
294293 let alpn_protocol = match config. http_version_pref {
295294 HttpVersionPref :: Http1 => Some ( AlpnProtocol :: HTTP1 ) ,
@@ -317,7 +316,7 @@ impl ClientBuilder {
317316 . build ( config. connector_layers ) ?
318317 } ;
319318
320- // Create client with the configured connector
319+ // create client with the configured connector
321320 let client = {
322321 let http2_only = matches ! ( config. http_version_pref, HttpVersionPref :: Http2 ) ;
323322 let mut builder = HttpClient :: builder ( TokioExecutor :: new ( ) ) ;
@@ -333,10 +332,9 @@ impl ClientBuilder {
333332 builder. build ( connector)
334333 } ;
335334
336- // Create the client with the configured service layers
335+ // create the client with the configured service layers
337336 let client = {
338- // Start with the base client service, which handles headers, original headers,
339- // HTTPS-only, and proxies.
337+ // configured client service layer
340338 let service = ClientService :: new (
341339 client,
342340 config. headers ,
@@ -345,13 +343,13 @@ impl ClientBuilder {
345343 proxies,
346344 ) ;
347345
348- // Add cookie service layer if cookies are enabled.
346+ // configured cookie service layer if cookies are enabled.
349347 #[ cfg( feature = "cookies" ) ]
350348 let service = ServiceBuilder :: new ( )
351349 . layer ( CookieServiceLayer :: new ( config. cookie_store ) )
352350 . service ( service) ;
353351
354- // Add response decompression support (gzip, zstd, brotli, deflate) if enabled.
352+ // configured response decompression support (gzip, zstd, brotli, deflate) if enabled.
355353 #[ cfg( any(
356354 feature = "gzip" ,
357355 feature = "zstd" ,
@@ -362,12 +360,12 @@ impl ClientBuilder {
362360 . layer ( DecompressionLayer :: new ( config. accept_encoding ) )
363361 . service ( service) ;
364362
365- // Add a timeout layer for the response body.
363+ // configured timeout layer for the response body.
366364 let service = ServiceBuilder :: new ( )
367365 . layer ( ResponseBodyTimeoutLayer :: new ( config. timeout_options ) )
368366 . service ( service) ;
369367
370- // Add redirect following logic with the configured policy.
368+ // configured redirect following logic with the configured policy.
371369 let service = {
372370 let policy = FollowRedirectPolicy :: new ( config. redirect_policy )
373371 . with_referer ( config. referer )
@@ -378,14 +376,14 @@ impl ClientBuilder {
378376 . service ( service)
379377 } ;
380378
381- // Add HTTP/2 retry logic.
379+ // configured HTTP/2 retry logic.
382380 let service = ServiceBuilder :: new ( )
383381 . layer ( RetryLayer :: new ( Http2RetryPolicy :: new (
384382 config. http2_max_retry ,
385383 ) ) )
386384 . service ( service) ;
387385
388- // Add the configured layers to the service.
386+ // configured layers to the service.
389387 if config. layers . is_empty ( ) {
390388 let service = ServiceBuilder :: new ( )
391389 . layer ( TimeoutLayer :: new ( config. timeout_options ) )
@@ -1262,8 +1260,11 @@ impl ClientBuilder {
12621260 /// Overrides for specific names passed to `resolve` and `resolve_to_addrs` will
12631261 /// still be applied on top of this resolver.
12641262 #[ inline]
1265- pub fn dns_resolver ( mut self , resolver : Arc < dyn Resolve > ) -> ClientBuilder {
1266- self . config . dns_resolver = Some ( resolver) ;
1263+ pub fn dns_resolver < R > ( mut self , resolver : R ) -> ClientBuilder
1264+ where
1265+ R : IntoResolve + Send + Sync + ' static ,
1266+ {
1267+ self . config . dns_resolver = Some ( resolver. into_resolve ( ) ) ;
12671268 self
12681269 }
12691270
0 commit comments