Skip to content

Commit 28fc76c

Browse files
committed
Update for futures v0.3.0-alpha.15
Remove FutureObj usage and futures_api feature
1 parent 676b497 commit 28fc76c

19 files changed

+37
-36
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: rust
22
rust:
3-
- nightly-2019-04-16
3+
- nightly-2019-04-25
44

55
before_script: |
66
rustup component add rustfmt clippy

Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ version = "0.1.1"
1414

1515
[dependencies]
1616
cookie = { version="0.11", features = ["percent-encode"] }
17-
futures-preview = "0.3.0-alpha.14"
17+
futures-preview = "0.3.0-alpha.15"
1818
fnv = "1.0.6"
1919
http = "0.1"
2020
http-service = "0.1.5"
@@ -48,3 +48,6 @@ juniper = "0.10.0"
4848
structopt = "0.2.15"
4949
http-service-mock = "0.1.1"
5050
serde = { version = "1.0.90", features = ["derive"] }
51+
52+
[patch.crates-io]
53+
http-service = { git = "https://github.com/Nemo157/http-service", branch = "remove-obj" }

examples/body_types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(async_await, futures_api, await_macro)]
1+
#![feature(async_await, await_macro)]
22

33
use serde::{Deserialize, Serialize};
44
use tide::{

examples/catch_all.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(async_await, futures_api)]
1+
#![feature(async_await)]
22

33
use tide::Context;
44

examples/cookies.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(async_await, futures_api)]
1+
#![feature(async_await)]
22

33
use cookie::Cookie;
44
use tide::{cookies::CookiesExt, middleware::CookiesMiddleware, Context};

examples/graphql.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//
44
// [the Juniper book]: https://graphql-rust.github.io/
55

6-
#![feature(async_await, futures_api, await_macro)]
6+
#![feature(async_await, await_macro)]
77

88
use http::status::StatusCode;
99
use juniper::graphql_object;

examples/messages.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(async_await, futures_api, await_macro)]
1+
#![feature(async_await, await_macro)]
22

33
use http::status::StatusCode;
44
use serde::{Deserialize, Serialize};

examples/multipart-form/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(async_await, futures_api, await_macro)]
1+
#![feature(async_await, await_macro)]
22

33
use serde::{Deserialize, Serialize};
44
use std::io::Read;

src/app.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use futures::future::{self, FutureObj};
1+
use futures::future::{self, BoxFuture};
22
use http_service::HttpService;
33
use std::sync::Arc;
44

@@ -246,7 +246,7 @@ pub struct Server<AppData> {
246246
impl<AppData: Sync + Send + 'static> HttpService for Server<AppData> {
247247
type Connection = ();
248248
type ConnectionFuture = future::Ready<Result<(), std::io::Error>>;
249-
type Fut = FutureObj<'static, Result<http_service::Response, std::io::Error>>;
249+
type Fut = BoxFuture<'static, Result<http_service::Response, std::io::Error>>;
250250

251251
fn connect(&self) -> Self::ConnectionFuture {
252252
future::ok(())
@@ -289,7 +289,7 @@ mod tests {
289289
app: &'a App<Data>,
290290
path: &'a str,
291291
method: http::Method,
292-
) -> FutureObj<'a, Response> {
292+
) -> BoxFuture<'a, Response> {
293293
let Selection { endpoint, params } = app.router.route(path, method.clone());
294294

295295
let data = Arc::new(Data::default());

src/endpoint.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use futures::future::{Future, FutureObj};
1+
use futures::future::{BoxFuture, Future};
22

33
use crate::{response::IntoResponse, Context, Response};
44

@@ -58,15 +58,15 @@ pub trait Endpoint<AppData>: Send + Sync + 'static {
5858
}
5959

6060
pub(crate) type DynEndpoint<AppData> =
61-
dyn (Fn(Context<AppData>) -> FutureObj<'static, Response>) + 'static + Send + Sync;
61+
dyn (Fn(Context<AppData>) -> BoxFuture<'static, Response>) + 'static + Send + Sync;
6262

6363
impl<AppData, F: Send + Sync + 'static, Fut> Endpoint<AppData> for F
6464
where
6565
F: Fn(Context<AppData>) -> Fut,
6666
Fut: Future + Send + 'static,
6767
Fut::Output: IntoResponse,
6868
{
69-
type Fut = FutureObj<'static, Response>;
69+
type Fut = BoxFuture<'static, Response>;
7070
fn call(&self, cx: Context<AppData>) -> Self::Fut {
7171
let fut = (self)(cx);
7272
box_async! {

src/error.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
use core::pin::Pin;
2+
use futures::future::Future;
13
use http::{HttpTryFrom, Response, StatusCode};
24
use http_service::Body;
35

46
use crate::response::IntoResponse;
57

6-
pub(crate) type BoxTryFuture<T> = futures::future::FutureObj<'static, EndpointResult<T>>;
8+
pub(crate) type BoxTryFuture<T> = Pin<Box<dyn Future<Output = EndpointResult<T>> + Send + 'static>>;
79

810
/// A convenient `Result` instantiation appropriate for most endpoints.
911
pub type EndpointResult<T = Response<Body>> = Result<T, Error>;

src/forms.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use futures::future::FutureObj;
21
use http_service::Body;
32
use multipart::server::Multipart;
43
use std::io::Cursor;

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#![cfg_attr(feature = "nightly", feature(external_doc))]
33
#![cfg_attr(feature = "nightly", doc(include = "../README.md"))]
44
#![cfg_attr(test, deny(warnings))]
5-
#![feature(futures_api, async_await, await_macro, existential_type)]
5+
#![feature(async_await, await_macro, existential_type)]
66
#![allow(unused_variables)]
77
#![deny(nonstandard_style, rust_2018_idioms, future_incompatible)]
88
// TODO: Remove this after clippy bug due to async await is resolved.
@@ -18,7 +18,7 @@
1818
1919
macro_rules! box_async {
2020
{$($t:tt)*} => {
21-
FutureObj::new(Box::new(async move { $($t)* }))
21+
::futures::future::FutureExt::boxed(async move { $($t)* })
2222
};
2323
}
2424

src/middleware/cookies.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::cookies::CookieData;
2-
use futures::future::FutureObj;
2+
use futures::future::BoxFuture;
33
use http::header::HeaderValue;
44

55
use crate::{
@@ -30,7 +30,7 @@ impl<Data: Send + Sync + 'static> Middleware<Data> for CookiesMiddleware {
3030
&'a self,
3131
mut cx: Context<Data>,
3232
next: Next<'a, Data>,
33-
) -> FutureObj<'a, Response> {
33+
) -> BoxFuture<'a, Response> {
3434
box_async! {
3535
let cookie_data = cx
3636
.extensions_mut()

src/middleware/default_headers.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use futures::future::FutureObj;
1+
use futures::future::BoxFuture;
22

33
use http::{
44
header::{HeaderValue, IntoHeaderName},
@@ -40,7 +40,7 @@ impl DefaultHeaders {
4040
}
4141

4242
impl<Data: Send + Sync + 'static> Middleware<Data> for DefaultHeaders {
43-
fn handle<'a>(&'a self, cx: Context<Data>, next: Next<'a, Data>) -> FutureObj<'a, Response> {
43+
fn handle<'a>(&'a self, cx: Context<Data>, next: Next<'a, Data>) -> BoxFuture<'a, Response> {
4444
box_async! {
4545
let mut res = await!(next.run(cx));
4646

src/middleware/logger.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use slog::{info, o, Drain};
22
use slog_async;
33
use slog_term;
44

5-
use futures::future::FutureObj;
5+
use futures::future::BoxFuture;
66

77
use crate::{
88
middleware::{Middleware, Next},
@@ -35,7 +35,7 @@ impl Default for RootLogger {
3535
/// Stores information during request phase and logs information once the response
3636
/// is generated.
3737
impl<Data: Send + Sync + 'static> Middleware<Data> for RootLogger {
38-
fn handle<'a>(&'a self, cx: Context<Data>, next: Next<'a, Data>) -> FutureObj<'a, Response> {
38+
fn handle<'a>(&'a self, cx: Context<Data>, next: Next<'a, Data>) -> BoxFuture<'a, Response> {
3939
box_async! {
4040
let path = cx.uri().path().to_owned();
4141
let method = cx.method().as_str().to_owned();

src/middleware/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use futures::future::FutureObj;
1+
use futures::future::BoxFuture;
22
use std::sync::Arc;
33

44
use crate::{endpoint::DynEndpoint, Context, Response};
@@ -16,14 +16,14 @@ pub trait Middleware<AppData>: 'static + Send + Sync {
1616
&'a self,
1717
cx: Context<AppData>,
1818
next: Next<'a, AppData>,
19-
) -> FutureObj<'a, Response>;
19+
) -> BoxFuture<'a, Response>;
2020
}
2121

2222
impl<Data, F> Middleware<Data> for F
2323
where
24-
F: Send + Sync + 'static + for<'a> Fn(Context<Data>, Next<'a, Data>) -> FutureObj<'a, Response>,
24+
F: Send + Sync + 'static + for<'a> Fn(Context<Data>, Next<'a, Data>) -> BoxFuture<'a, Response>,
2525
{
26-
fn handle<'a>(&'a self, cx: Context<Data>, next: Next<'a, Data>) -> FutureObj<'a, Response> {
26+
fn handle<'a>(&'a self, cx: Context<Data>, next: Next<'a, Data>) -> BoxFuture<'a, Response> {
2727
(self)(cx, next)
2828
}
2929
}
@@ -36,7 +36,7 @@ pub struct Next<'a, AppData> {
3636

3737
impl<'a, AppData: 'static> Next<'a, AppData> {
3838
/// Asynchronously execute the remaining middleware chain.
39-
pub fn run(mut self, cx: Context<AppData>) -> FutureObj<'a, Response> {
39+
pub fn run(mut self, cx: Context<AppData>) -> BoxFuture<'a, Response> {
4040
if let Some((current, next)) = self.next_middleware.split_first() {
4141
self.next_middleware = next;
4242
current.handle(cx, self)

src/router.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use fnv::FnvHashMap;
2-
use futures::future::FutureObj;
2+
use futures::future::{BoxFuture, FutureExt};
33
use http_service::Body;
44
use route_recognizer::{Match, Params, Router as MethodRouter};
55

@@ -33,10 +33,7 @@ impl<AppData: 'static> Router<AppData> {
3333
self.method_map
3434
.entry(method)
3535
.or_insert_with(MethodRouter::new)
36-
.add(
37-
path,
38-
Box::new(move |cx| FutureObj::new(Box::new(ep.call(cx)))),
39-
)
36+
.add(path, Box::new(move |cx| ep.call(cx).boxed()))
4037
}
4138

4239
pub(crate) fn route(&self, path: &str, method: http::Method) -> Selection<'_, AppData> {
@@ -63,7 +60,7 @@ impl<AppData: 'static> Router<AppData> {
6360
}
6461
}
6562

66-
fn not_found_endpoint<Data>(_cx: Context<Data>) -> FutureObj<'static, Response> {
63+
fn not_found_endpoint<Data>(_cx: Context<Data>) -> BoxFuture<'static, Response> {
6764
box_async! {
6865
http::Response::builder().status(http::StatusCode::NOT_FOUND).body(Body::empty()).unwrap()
6966
}

tests/wildcard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(futures_api, async_await)]
1+
#![feature(async_await)]
22

33
use futures::executor::block_on;
44
use http_service::Body;

0 commit comments

Comments
 (0)