@@ -29,14 +29,13 @@ use tokio::sync::mpsc::{channel, Sender};
29
29
use hyper:: rt;
30
30
use tower:: balance:: p2c:: Balance ;
31
31
use tower:: {
32
- buffer:: { self , Buffer } ,
32
+ buffer:: { future :: ResponseFuture as BufferResponseFuture , Buffer } ,
33
33
discover:: { Change , Discover } ,
34
- util:: { BoxService , Either } ,
34
+ util:: BoxService ,
35
35
Service ,
36
36
} ;
37
37
38
38
type BoxFuture < ' a , T > = Pin < Box < dyn Future < Output = T > + Send + ' a > > ;
39
- type Svc = Either < Connection , BoxService < Request < BoxBody > , Response < BoxBody > , crate :: Error > > ;
40
39
41
40
const DEFAULT_BUFFER_SIZE : usize = 1024 ;
42
41
@@ -65,14 +64,14 @@ const DEFAULT_BUFFER_SIZE: usize = 1024;
65
64
/// cloning the `Channel` type is cheap and encouraged.
66
65
#[ derive( Clone ) ]
67
66
pub struct Channel {
68
- svc : Buffer < Svc , Request < BoxBody > > ,
67
+ svc : Buffer < Request < BoxBody > , BoxFuture < ' static , Result < Response < BoxBody > , crate :: Error > > > ,
69
68
}
70
69
71
70
/// A future that resolves to an HTTP response.
72
71
///
73
72
/// This is returned by the `Service::call` on [`Channel`].
74
73
pub struct ResponseFuture {
75
- inner : buffer :: future :: ResponseFuture < < Svc as Service < Request < BoxBody > > > :: Future > ,
74
+ inner : BufferResponseFuture < BoxFuture < ' static , Result < Response < BoxBody > , crate :: Error > > > ,
76
75
}
77
76
78
77
impl Channel {
@@ -156,7 +155,8 @@ impl Channel {
156
155
let executor = endpoint. executor . clone ( ) ;
157
156
158
157
let svc = Connection :: lazy ( connector, endpoint) ;
159
- let ( svc, worker) = Buffer :: pair ( Either :: A ( svc) , buffer_size) ;
158
+ let ( svc, worker) = Buffer :: pair ( svc, buffer_size) ;
159
+
160
160
executor. execute ( worker) ;
161
161
162
162
Channel { svc }
@@ -175,7 +175,7 @@ impl Channel {
175
175
let svc = Connection :: connect ( connector, endpoint)
176
176
. await
177
177
. map_err ( super :: Error :: from_source) ?;
178
- let ( svc, worker) = Buffer :: pair ( Either :: A ( svc) , buffer_size) ;
178
+ let ( svc, worker) = Buffer :: pair ( svc, buffer_size) ;
179
179
executor. execute ( worker) ;
180
180
181
181
Ok ( Channel { svc } )
@@ -191,7 +191,7 @@ impl Channel {
191
191
let svc = Balance :: new ( discover) ;
192
192
193
193
let svc = BoxService :: new ( svc) ;
194
- let ( svc, worker) = Buffer :: pair ( Either :: B ( svc) , buffer_size) ;
194
+ let ( svc, worker) = Buffer :: pair ( svc, buffer_size) ;
195
195
executor. execute ( Box :: pin ( worker) ) ;
196
196
197
197
Channel { svc }
0 commit comments