diff --git a/actix-service/CHANGES.md b/actix-service/CHANGES.md index 4438caba..034585c0 100644 --- a/actix-service/CHANGES.md +++ b/actix-service/CHANGES.md @@ -1,5 +1,12 @@ # Changes +## [0.3.6] - 2019-04-07 + +### Changed + +* Poll boxed service call result immediately + + ## [0.3.5] - 2019-03-29 ### Added diff --git a/actix-service/Cargo.toml b/actix-service/Cargo.toml index 8a8e7c27..bf835bce 100644 --- a/actix-service/Cargo.toml +++ b/actix-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "actix-service" -version = "0.3.5" +version = "0.3.6" authors = ["Nikolay Kim "] description = "Actix Service" keywords = ["network", "framework", "async", "futures"] diff --git a/actix-service/src/boxed.rs b/actix-service/src/boxed.rs index 91c7bbb2..afd99d81 100644 --- a/actix-service/src/boxed.rs +++ b/actix-service/src/boxed.rs @@ -1,12 +1,14 @@ +use futures::future::{err, ok, Either, FutureResult}; +use futures::{Async, Future, IntoFuture, Poll}; + use crate::{NewService, Service}; -use futures::{Future, IntoFuture, Poll}; pub type BoxedService = Box< Service< Request = Req, Response = Res, Error = Err, - Future = Box>, + Future = Either, Box>>, >, >; @@ -125,13 +127,21 @@ where type Request = Req; type Response = Res; type Error = Err; - type Future = Box>; + type Future = Either< + FutureResult, + Box>, + >; fn poll_ready(&mut self) -> Poll<(), Self::Error> { self.0.poll_ready() } fn call(&mut self, req: Self::Request) -> Self::Future { - Box::new(self.0.call(req)) + let mut fut = self.0.call(req); + match fut.poll() { + Ok(Async::Ready(res)) => Either::A(ok(res)), + Err(e) => Either::A(err(e)), + Ok(Async::NotReady) => Either::B(Box::new(fut)), + } } }