refactor(compat): use pub(super) to remove compat_impl modules
This commit is contained in:
@@ -1,6 +1,55 @@
|
|||||||
//! Wrappers to build compatibility with the `http` crate.
|
//! Wrappers to build compatibility with the `http` crate.
|
||||||
|
|
||||||
pub use super::compat_impl::{
|
use futures::{Future, Poll, Stream};
|
||||||
CompatClient,
|
use http;
|
||||||
CompatFutureResponse
|
use tokio_service::Service;
|
||||||
};
|
|
||||||
|
use client::{Connect, Client, FutureResponse};
|
||||||
|
use error::Error;
|
||||||
|
use proto::Body;
|
||||||
|
|
||||||
|
/// A Client to make outgoing HTTP requests.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct CompatClient<C, B = Body> {
|
||||||
|
inner: Client<C, B>
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn client<C, B>(client: Client<C, B>) -> CompatClient<C, B> {
|
||||||
|
CompatClient { inner: client }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<C, B> Service for CompatClient<C, B>
|
||||||
|
where C: Connect,
|
||||||
|
B: Stream<Error=Error> + 'static,
|
||||||
|
B::Item: AsRef<[u8]>,
|
||||||
|
{
|
||||||
|
type Request = http::Request<B>;
|
||||||
|
type Response = http::Response<Body>;
|
||||||
|
type Error = Error;
|
||||||
|
type Future = CompatFutureResponse;
|
||||||
|
|
||||||
|
fn call(&self, req: Self::Request) -> Self::Future {
|
||||||
|
future(self.inner.call(req.into()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A `Future` that will resolve to an `http::Response`.
|
||||||
|
#[must_use = "futures do nothing unless polled"]
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct CompatFutureResponse {
|
||||||
|
inner: FutureResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn future(fut: FutureResponse) -> CompatFutureResponse {
|
||||||
|
CompatFutureResponse { inner: fut }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Future for CompatFutureResponse {
|
||||||
|
type Item = http::Response<Body>;
|
||||||
|
type Error = Error;
|
||||||
|
|
||||||
|
fn poll(&mut self) -> Poll<Self::Item, Error> {
|
||||||
|
self.inner.poll()
|
||||||
|
.map(|a| a.map(|r| r.into()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
use futures::{Future, Poll, Stream};
|
|
||||||
use http;
|
|
||||||
use tokio_service::Service;
|
|
||||||
|
|
||||||
use client::{Connect, Client, FutureResponse};
|
|
||||||
use error::Error;
|
|
||||||
use proto::Body;
|
|
||||||
|
|
||||||
/// A Client to make outgoing HTTP requests.
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct CompatClient<C, B = Body> {
|
|
||||||
inner: Client<C, B>
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn client<C, B>(client: Client<C, B>) -> CompatClient<C, B> {
|
|
||||||
CompatClient { inner: client }
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<C, B> Service for CompatClient<C, B>
|
|
||||||
where C: Connect,
|
|
||||||
B: Stream<Error=Error> + 'static,
|
|
||||||
B::Item: AsRef<[u8]>,
|
|
||||||
{
|
|
||||||
type Request = http::Request<B>;
|
|
||||||
type Response = http::Response<Body>;
|
|
||||||
type Error = Error;
|
|
||||||
type Future = CompatFutureResponse;
|
|
||||||
|
|
||||||
fn call(&self, req: Self::Request) -> Self::Future {
|
|
||||||
future(self.inner.call(req.into()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A `Future` that will resolve to an `http::Response`.
|
|
||||||
#[must_use = "futures do nothing unless polled"]
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct CompatFutureResponse {
|
|
||||||
inner: FutureResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn future(fut: FutureResponse) -> CompatFutureResponse {
|
|
||||||
CompatFutureResponse { inner: fut }
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Future for CompatFutureResponse {
|
|
||||||
type Item = http::Response<Body>;
|
|
||||||
type Error = Error;
|
|
||||||
|
|
||||||
fn poll(&mut self) -> Poll<Self::Item, Error> {
|
|
||||||
self.inner.poll()
|
|
||||||
.map(|a| a.map(|r| r.into()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -32,8 +32,6 @@ mod connect;
|
|||||||
mod dns;
|
mod dns;
|
||||||
mod pool;
|
mod pool;
|
||||||
#[cfg(feature = "compat")]
|
#[cfg(feature = "compat")]
|
||||||
mod compat_impl;
|
|
||||||
#[cfg(feature = "compat")]
|
|
||||||
pub mod compat;
|
pub mod compat;
|
||||||
|
|
||||||
/// A Client to make outgoing HTTP requests.
|
/// A Client to make outgoing HTTP requests.
|
||||||
@@ -121,13 +119,13 @@ where C: Connect,
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[cfg(feature = "compat")]
|
#[cfg(feature = "compat")]
|
||||||
pub fn request_compat(&self, req: http::Request<B>) -> compat::CompatFutureResponse {
|
pub fn request_compat(&self, req: http::Request<B>) -> compat::CompatFutureResponse {
|
||||||
self::compat_impl::future(self.call(req.into()))
|
self::compat::future(self.call(req.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert into a client accepting `http::Request`.
|
/// Convert into a client accepting `http::Request`.
|
||||||
#[cfg(feature = "compat")]
|
#[cfg(feature = "compat")]
|
||||||
pub fn into_compat(self) -> compat::CompatClient<C, B> {
|
pub fn into_compat(self) -> compat::CompatClient<C, B> {
|
||||||
self::compat_impl::client(self)
|
self::compat::client(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,84 @@
|
|||||||
//! Wrappers to build compatibility with the `http` crate.
|
//! Wrappers to build compatibility with the `http` crate.
|
||||||
|
|
||||||
pub use super::compat_impl::{
|
use std::io::{Error as IoError};
|
||||||
CompatFuture,
|
|
||||||
CompatService,
|
use futures::{Future, Poll};
|
||||||
NewCompatService
|
use http;
|
||||||
};
|
use tokio_service::{NewService, Service};
|
||||||
|
|
||||||
|
use error::Error;
|
||||||
|
use proto::Body;
|
||||||
|
use proto::request::Request;
|
||||||
|
use proto::response::Response;
|
||||||
|
|
||||||
|
/// Wraps a `Future` returning an `http::Response` into
|
||||||
|
/// a `Future` returning a `hyper::server::Response`.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct CompatFuture<F> {
|
||||||
|
future: F
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<F, Bd> Future for CompatFuture<F>
|
||||||
|
where F: Future<Item=http::Response<Bd>, Error=Error>
|
||||||
|
{
|
||||||
|
type Item = Response<Bd>;
|
||||||
|
type Error = Error;
|
||||||
|
|
||||||
|
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
|
||||||
|
self.future.poll()
|
||||||
|
.map(|a| a.map(|res| res.into()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps a `Service` taking an `http::Request` and returning
|
||||||
|
/// an `http::Response` into a `Service` taking a `hyper::server::Request`,
|
||||||
|
/// and returning a `hyper::server::Response`.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct CompatService<S> {
|
||||||
|
service: S
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn service<S>(service: S) -> CompatService<S> {
|
||||||
|
CompatService { service: service }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<S, Bd> Service for CompatService<S>
|
||||||
|
where S: Service<Request=http::Request<Body>, Response=http::Response<Bd>, Error=Error>
|
||||||
|
{
|
||||||
|
type Request = Request;
|
||||||
|
type Response = Response<Bd>;
|
||||||
|
type Error = Error;
|
||||||
|
type Future = CompatFuture<S::Future>;
|
||||||
|
|
||||||
|
fn call(&self, req: Self::Request) -> Self::Future {
|
||||||
|
CompatFuture {
|
||||||
|
future: self.service.call(req.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Wraps a `NewService` taking an `http::Request` and returning
|
||||||
|
/// an `http::Response` into a `NewService` taking a `hyper::server::Request`,
|
||||||
|
/// and returning a `hyper::server::Response`.
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct NewCompatService<S> {
|
||||||
|
new_service: S
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn new_service<S>(new_service: S) -> NewCompatService<S> {
|
||||||
|
NewCompatService { new_service: new_service }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<S, Bd> NewService for NewCompatService<S>
|
||||||
|
where S: NewService<Request=http::Request<Body>, Response=http::Response<Bd>, Error=Error>
|
||||||
|
{
|
||||||
|
type Request = Request;
|
||||||
|
type Response = Response<Bd>;
|
||||||
|
type Error = Error;
|
||||||
|
type Instance = CompatService<S::Instance>;
|
||||||
|
|
||||||
|
fn new_service(&self) -> Result<Self::Instance, IoError> {
|
||||||
|
self.new_service.new_service()
|
||||||
|
.map(service)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
use std::io::{Error as IoError};
|
|
||||||
|
|
||||||
use futures::{Future, Poll};
|
|
||||||
use http;
|
|
||||||
use tokio_service::{NewService, Service};
|
|
||||||
|
|
||||||
use error::Error;
|
|
||||||
use proto::Body;
|
|
||||||
use proto::request::Request;
|
|
||||||
use proto::response::Response;
|
|
||||||
|
|
||||||
/// Wraps a `Future` returning an `http::Response` into
|
|
||||||
/// a `Future` returning a `hyper::server::Response`.
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct CompatFuture<F> {
|
|
||||||
future: F
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<F, Bd> Future for CompatFuture<F>
|
|
||||||
where F: Future<Item=http::Response<Bd>, Error=Error>
|
|
||||||
{
|
|
||||||
type Item = Response<Bd>;
|
|
||||||
type Error = Error;
|
|
||||||
|
|
||||||
fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
|
|
||||||
self.future.poll()
|
|
||||||
.map(|a| a.map(|res| res.into()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps a `Service` taking an `http::Request` and returning
|
|
||||||
/// an `http::Response` into a `Service` taking a `hyper::server::Request`,
|
|
||||||
/// and returning a `hyper::server::Response`.
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct CompatService<S> {
|
|
||||||
service: S
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn service<S>(service: S) -> CompatService<S> {
|
|
||||||
CompatService { service: service }
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<S, Bd> Service for CompatService<S>
|
|
||||||
where S: Service<Request=http::Request<Body>, Response=http::Response<Bd>, Error=Error>
|
|
||||||
{
|
|
||||||
type Request = Request;
|
|
||||||
type Response = Response<Bd>;
|
|
||||||
type Error = Error;
|
|
||||||
type Future = CompatFuture<S::Future>;
|
|
||||||
|
|
||||||
fn call(&self, req: Self::Request) -> Self::Future {
|
|
||||||
CompatFuture {
|
|
||||||
future: self.service.call(req.into())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Wraps a `NewService` taking an `http::Request` and returning
|
|
||||||
/// an `http::Response` into a `NewService` taking a `hyper::server::Request`,
|
|
||||||
/// and returning a `hyper::server::Response`.
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct NewCompatService<S> {
|
|
||||||
new_service: S
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn new_service<S>(new_service: S) -> NewCompatService<S> {
|
|
||||||
NewCompatService { new_service: new_service }
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<S, Bd> NewService for NewCompatService<S>
|
|
||||||
where S: NewService<Request=http::Request<Body>, Response=http::Response<Bd>, Error=Error>
|
|
||||||
{
|
|
||||||
type Request = Request;
|
|
||||||
type Response = Response<Bd>;
|
|
||||||
type Error = Error;
|
|
||||||
type Instance = CompatService<S::Instance>;
|
|
||||||
|
|
||||||
fn new_service(&self) -> Result<Self::Instance, IoError> {
|
|
||||||
self.new_service.new_service()
|
|
||||||
.map(service)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,8 +3,6 @@
|
|||||||
//! A `Server` is created to listen on a port, parse HTTP requests, and hand
|
//! A `Server` is created to listen on a port, parse HTTP requests, and hand
|
||||||
//! them off to a `Service`.
|
//! them off to a `Service`.
|
||||||
|
|
||||||
#[cfg(feature = "compat")]
|
|
||||||
mod compat_impl;
|
|
||||||
#[cfg(feature = "compat")]
|
#[cfg(feature = "compat")]
|
||||||
pub mod compat;
|
pub mod compat;
|
||||||
mod service;
|
mod service;
|
||||||
@@ -191,7 +189,7 @@ impl<B: AsRef<[u8]> + 'static> Http<B> {
|
|||||||
Send + Sync + 'static,
|
Send + Sync + 'static,
|
||||||
Bd: Stream<Item=B, Error=::Error>,
|
Bd: Stream<Item=B, Error=::Error>,
|
||||||
{
|
{
|
||||||
self.bind(addr, self::compat_impl::new_service(new_service))
|
self.bind(addr, self::compat::new_service(new_service))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Bind the provided `addr` and return a server with a shared `Core`.
|
/// Bind the provided `addr` and return a server with a shared `Core`.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ use proto::{self, request, response};
|
|||||||
#[cfg(feature = "compat")]
|
#[cfg(feature = "compat")]
|
||||||
use proto::Body;
|
use proto::Body;
|
||||||
#[cfg(feature = "compat")]
|
#[cfg(feature = "compat")]
|
||||||
use super::compat_impl;
|
use super::compat;
|
||||||
use super::Http;
|
use super::Http;
|
||||||
|
|
||||||
impl<B: AsRef<[u8]> + 'static> Http<B> {
|
impl<B: AsRef<[u8]> + 'static> Http<B> {
|
||||||
@@ -71,7 +71,7 @@ impl<B: AsRef<[u8]> + 'static> Http<B> {
|
|||||||
I: AsyncRead + AsyncWrite + 'static,
|
I: AsyncRead + AsyncWrite + 'static,
|
||||||
{
|
{
|
||||||
self.bind_server(handle, io, HttpService {
|
self.bind_server(handle, io, HttpService {
|
||||||
inner: compat_impl::service(service),
|
inner: compat::service(service),
|
||||||
remote_addr: remote_addr,
|
remote_addr: remote_addr,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user