Skip to content
This repository was archived by the owner on Mar 13, 2021. It is now read-only.

Commit 0124184

Browse files
committed
update to latest tower and tower-hyper updates
1 parent f7aab6c commit 0124184

File tree

2 files changed

+18
-27
lines changed

2 files changed

+18
-27
lines changed

src/http-client.rs

+11-20
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ use hyper::{
44
Request, Response, Uri,
55
};
66
use std::time::Duration;
7-
use tower::{builder::ServiceBuilder, reconnect::Reconnect, Service, ServiceExt};
7+
use tower::{MakeService, Service};
8+
use tower::builder::ServiceBuilder;
89
use tower_hyper::{
10+
Body,
911
client::{Builder, Connect},
10-
retry::{Body, RetryPolicy},
1112
util::Connector,
1213
};
1314

@@ -24,40 +25,30 @@ fn request() -> impl Future<Item = Response<hyper::Body>, Error = ()> {
2425
let connector = Connector::new(HttpConnector::new(1));
2526
let hyper = Connect::new(connector, Builder::new());
2627

27-
// RetryPolicy is a very simple policy that retries `n` times
28-
// if the response has a 500 status code. Here, `n` is 5.
29-
let policy = RetryPolicy::new(5);
3028
// We're calling the tower/examples/server.rs.
3129
let dst = Destination::try_from_uri(Uri::from_static("http://127.0.0.1:3000")).unwrap();
3230

33-
// Now, to build the service! We use two BufferLayers in order to:
34-
// - provide backpressure for the RateLimitLayer, and ConcurrencyLimitLayer
35-
// - meet `RetryLayer`'s requirement that our service implement `Service + Clone`
36-
// - ..and to provide cheap clones on the service.
37-
let maker = ServiceBuilder::new()
31+
// Now, to build the service!
32+
let mut maker = ServiceBuilder::new()
3833
.buffer(5)
3934
.rate_limit(5, Duration::from_secs(1))
4035
.concurrency_limit(5)
41-
.retry(policy)
42-
.buffer(5)
43-
.make_service(hyper);
36+
.service(hyper);
4437

45-
// `Reconnect` accepts a destination and a MakeService, creating a new service
46-
// any time the connection encounters an error.
47-
let client = Reconnect::new(maker, dst);
38+
let client = maker
39+
.make_service(dst)
40+
.map_err(|err| eprintln!("Connect Error {:?}", err));
4841

4942
let request = Request::builder()
5043
.method("GET")
51-
.body(Body::from(Vec::new()))
44+
.body(Vec::new())
5245
.unwrap();
5346

54-
// we check to see if the client is ready to accept requests.
5547
client
56-
.ready()
5748
.map_err(|e| panic!("Service is not ready: {:?}", e))
5849
.and_then(|mut c| {
5950
c.call(request)
60-
.map(|res| res.map(|b| b.into_inner()))
51+
.map(|res| res.map(Body::into_inner))
6152
.map_err(|e| panic!("{:?}", e))
6253
})
6354
}

src/http-server.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use futures::{future, Future, Poll, Stream};
2-
use hyper::{self, Body, Request, Response};
2+
use hyper::{self, Request, Response};
33
use tokio::net::TcpListener;
44
use tower::{builder::ServiceBuilder, Service};
5-
use tower_hyper::{body::LiftBody, server::Server};
5+
use tower_hyper::{Body, server::Server};
66

77
fn main() {
88
hyper::rt::run(future::lazy(|| {
@@ -13,7 +13,7 @@ fn main() {
1313

1414
let maker = ServiceBuilder::new()
1515
.concurrency_limit(5)
16-
.make_service(MakeSvc);
16+
.service(MakeSvc);
1717

1818
let server = Server::new(maker);
1919

@@ -37,17 +37,17 @@ fn main() {
3737
}
3838

3939
struct Svc;
40-
impl Service<Request<LiftBody<Body>>> for Svc {
41-
type Response = Response<&'static str>;
40+
impl Service<Request<Body>> for Svc {
41+
type Response = Response<Body>;
4242
type Error = hyper::Error;
4343
type Future = future::FutureResult<Self::Response, Self::Error>;
4444

4545
fn poll_ready(&mut self) -> Poll<(), Self::Error> {
4646
Ok(().into())
4747
}
4848

49-
fn call(&mut self, _req: Request<LiftBody<Body>>) -> Self::Future {
50-
let res = Response::new("Hello World!");
49+
fn call(&mut self, _req: Request<Body>) -> Self::Future {
50+
let res = Response::new(Body::from(hyper::Body::from("Hello World!")));
5151
future::ok(res)
5252
}
5353
}

0 commit comments

Comments
 (0)