1
0
mirror of https://github.com/fafhrd91/actix-web synced 2024-11-27 17:52:56 +01:00
actix-web/awc/src/connect.rs

39 lines
1.1 KiB
Rust
Raw Normal View History

2019-03-26 05:58:01 +01:00
use actix_http::body::Body;
use actix_http::client::{ClientResponse, ConnectError, Connection, SendRequestError};
use actix_http::{http, RequestHead};
use actix_service::Service;
use futures::Future;
pub(crate) struct ConnectorWrapper<T>(pub T);
pub(crate) trait Connect {
fn send_request(
&mut self,
head: RequestHead,
body: Body,
) -> Box<Future<Item = ClientResponse, Error = SendRequestError>>;
}
impl<T> Connect for ConnectorWrapper<T>
where
T: Service<Request = http::Uri, Error = ConnectError>,
T::Response: Connection,
<T::Response as Connection>::Future: 'static,
T::Future: 'static,
{
fn send_request(
&mut self,
head: RequestHead,
body: Body,
) -> Box<Future<Item = ClientResponse, Error = SendRequestError>> {
Box::new(
self.0
// connect to the host
.call(head.uri.clone())
.from_err()
// send request
.and_then(move |connection| connection.send_request(head, body)),
)
}
}