@@ -56,7 +56,7 @@ use std::time::Duration;
5656
5757use bytes:: Bytes ;
5858use futures_util:: future:: { self , Either , FutureExt as _} ;
59- use pin_project :: pin_project;
59+ use pin_project_lite :: pin_project;
6060use tokio:: io:: { AsyncRead , AsyncWrite } ;
6161use tower_service:: Service ;
6262
@@ -75,15 +75,23 @@ use crate::{Body, Request, Response};
7575#[ cfg( feature = "http1" ) ]
7676type Http1Dispatcher < T , B , R > = proto:: dispatch:: Dispatcher < proto:: dispatch:: Client < B > , B , T , R > ;
7777
78- #[ pin_project( project = ProtoClientProj ) ]
79- enum ProtoClient < T , B >
80- where
81- B : HttpBody ,
82- {
83- #[ cfg( feature = "http1" ) ]
84- H1 ( #[ pin] Http1Dispatcher < T , B , proto:: h1:: ClientTransaction > ) ,
85- #[ cfg( feature = "http2" ) ]
86- H2 ( #[ pin] proto:: h2:: ClientTask < B > , PhantomData < fn ( T ) > ) ,
78+ pin_project ! {
79+ #[ project = ProtoClientProj ]
80+ enum ProtoClient <T , B >
81+ where
82+ B : HttpBody ,
83+ {
84+ #[ cfg( feature = "http1" ) ]
85+ H1 {
86+ #[ pin]
87+ h1: Http1Dispatcher <T , B , proto:: h1:: ClientTransaction >,
88+ } ,
89+ #[ cfg( feature = "http2" ) ]
90+ H2 {
91+ #[ pin]
92+ h2: proto:: h2:: ClientTask <B >, _phantom: PhantomData <fn ( T ) >,
93+ } ,
94+ }
8795}
8896
8997/// Returns a handshake future over some IO.
@@ -400,7 +408,7 @@ where
400408 pub fn into_parts ( self ) -> Parts < T > {
401409 match self . inner . expect ( "already upgraded" ) {
402410 #[ cfg( feature = "http1" ) ]
403- ProtoClient :: H1 ( h1 ) => {
411+ ProtoClient :: H1 { h1 } => {
404412 let ( io, read_buf, _) = h1. into_inner ( ) ;
405413 Parts {
406414 io,
@@ -409,7 +417,7 @@ where
409417 }
410418 }
411419 #[ cfg( feature = "http2" ) ]
412- ProtoClient :: H2 ( .. ) => {
420+ ProtoClient :: H2 { .. } => {
413421 panic ! ( "http2 cannot into_inner" ) ;
414422 }
415423 }
@@ -429,9 +437,9 @@ where
429437 pub fn poll_without_shutdown ( & mut self , cx : & mut task:: Context < ' _ > ) -> Poll < crate :: Result < ( ) > > {
430438 match * self . inner . as_mut ( ) . expect ( "already upgraded" ) {
431439 #[ cfg( feature = "http1" ) ]
432- ProtoClient :: H1 ( ref mut h1) => h1. poll_without_shutdown ( cx) ,
440+ ProtoClient :: H1 { ref mut h1 } => h1. poll_without_shutdown ( cx) ,
433441 #[ cfg( feature = "http2" ) ]
434- ProtoClient :: H2 ( ref mut h2, _ ) => Pin :: new ( h2) . poll ( cx) . map_ok ( |_| ( ) ) ,
442+ ProtoClient :: H2 { ref mut h2, .. } => Pin :: new ( h2) . poll ( cx) . map_ok ( |_| ( ) ) ,
435443 }
436444 }
437445
@@ -460,7 +468,7 @@ where
460468 proto:: Dispatched :: Shutdown => Poll :: Ready ( Ok ( ( ) ) ) ,
461469 #[ cfg( feature = "http1" ) ]
462470 proto:: Dispatched :: Upgrade ( pending) => match self . inner . take ( ) {
463- Some ( ProtoClient :: H1 ( h1 ) ) => {
471+ Some ( ProtoClient :: H1 { h1 } ) => {
464472 let ( io, buf, _) = h1. into_inner ( ) ;
465473 pending. fulfill ( Upgraded :: new ( io, buf) ) ;
466474 Poll :: Ready ( Ok ( ( ) ) )
@@ -707,14 +715,17 @@ impl Builder {
707715 }
708716 let cd = proto:: h1:: dispatch:: Client :: new ( rx) ;
709717 let dispatch = proto:: h1:: Dispatcher :: new ( cd, conn) ;
710- ProtoClient :: H1 ( dispatch)
718+ ProtoClient :: H1 { h1 : dispatch }
711719 }
712720 #[ cfg( feature = "http2" ) ]
713721 Proto :: Http2 => {
714722 let h2 =
715723 proto:: h2:: client:: handshake ( io, rx, & opts. h2_builder , opts. exec . clone ( ) )
716724 . await ?;
717- ProtoClient :: H2 ( h2, PhantomData )
725+ ProtoClient :: H2 {
726+ h2,
727+ _phantom : PhantomData ,
728+ }
718729 }
719730 } ;
720731
@@ -768,9 +779,9 @@ where
768779 fn poll ( self : Pin < & mut Self > , cx : & mut task:: Context < ' _ > ) -> Poll < Self :: Output > {
769780 match self . project ( ) {
770781 #[ cfg( feature = "http1" ) ]
771- ProtoClientProj :: H1 ( c ) => c . poll ( cx) ,
782+ ProtoClientProj :: H1 { h1 } => h1 . poll ( cx) ,
772783 #[ cfg( feature = "http2" ) ]
773- ProtoClientProj :: H2 ( c , _ ) => c . poll ( cx) ,
784+ ProtoClientProj :: H2 { h2 , .. } => h2 . poll ( cx) ,
774785 }
775786 }
776787}
0 commit comments