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