feat(server): change NewService to MakeService with connection context
This adjusts the way `Service`s are created for a `hyper::Server`. The `MakeService` trait allows receiving an argument when creating a `Service`. The implementation for `hyper::Server` expects to pass a reference to the accepted transport (so, `&Incoming::Item`). The user can inspect the transport before making a `Service`. In practice, this allows for things like getting the remote socket address, or the TLS certification, or similar. To prevent a breaking change, there is a blanket implementation of `MakeService` for any `NewService`. Besides implementing `MakeService` directly, there is also added `hyper::service::make_service_fn`. Closes #1650
This commit is contained in:
@@ -4,8 +4,8 @@ use tokio_io::{AsyncRead, AsyncWrite};
|
||||
use body::{Body, Payload};
|
||||
use common::drain::{self, Draining, Signal, Watch, Watching};
|
||||
use common::exec::{H2Exec, NewSvcExec};
|
||||
use service::{Service, NewService};
|
||||
use super::conn::{SpawnAll, UpgradeableConnection, Watcher};
|
||||
use service::Service;
|
||||
use super::conn::{MakeServiceRef, SpawnAll, UpgradeableConnection, Watcher};
|
||||
|
||||
#[allow(missing_debug_implementations)]
|
||||
pub struct Graceful<I, S, F, E> {
|
||||
@@ -40,7 +40,7 @@ where
|
||||
I: Stream,
|
||||
I::Error: Into<Box<::std::error::Error + Send + Sync>>,
|
||||
I::Item: AsyncRead + AsyncWrite + Send + 'static,
|
||||
S: NewService<ReqBody=Body, ResBody=B>,
|
||||
S: MakeServiceRef<I::Item, ReqBody=Body, ResBody=B>,
|
||||
S::Service: 'static,
|
||||
S::Error: Into<Box<::std::error::Error + Send + Sync>>,
|
||||
B: Payload,
|
||||
|
||||
Reference in New Issue
Block a user