NewService is generic over error (#5)

Previously, NewService required returning a future yielding io::Error as
the error. This is not needed and is restrictive.
This commit is contained in:
Carl Lerche 2017-09-21 16:50:28 -07:00 committed by GitHub
parent 270ef5a2bd
commit 3a0212d460
1 changed files with 9 additions and 4 deletions

View File

@ -12,7 +12,6 @@ extern crate futures;
use futures::{Future, IntoFuture};
use std::io;
use std::rc::Rc;
use std::sync::Arc;
@ -172,22 +171,26 @@ pub trait NewService {
/// The `Service` value created by this factory
type Instance: Service<Request = Self::Request, Response = Self::Response, Error = Self::Error>;
/// Errors produced while building a service.
type InitError;
/// The future of the `Service` instance.
type Future: Future<Item = Self::Instance, Error = io::Error>;
type Future: Future<Item = Self::Instance, Error = Self::InitError>;
/// Create and return a new service value asynchronously.
fn new_service(&self) -> Self::Future;
}
impl<F, R, S> NewService for F
impl<F, R, E, S> NewService for F
where F: Fn() -> R,
R: IntoFuture<Item = S, Error = io::Error>,
R: IntoFuture<Item = S, Error = E>,
S: Service,
{
type Request = S::Request;
type Response = S::Response;
type Error = S::Error;
type Instance = S;
type InitError = E;
type Future = R::Future;
fn new_service(&self) -> Self::Future {
@ -200,6 +203,7 @@ impl<S: NewService + ?Sized> NewService for Arc<S> {
type Response = S::Response;
type Error = S::Error;
type Instance = S::Instance;
type InitError = S::InitError;
type Future = S::Future;
fn new_service(&self) -> Self::Future {
@ -212,6 +216,7 @@ impl<S: NewService + ?Sized> NewService for Rc<S> {
type Response = S::Response;
type Error = S::Error;
type Instance = S::Instance;
type InitError = S::InitError;
type Future = S::Future;
fn new_service(&self) -> Self::Future {