Move service into transport

This commit is contained in:
Lucio Franco
2019-09-02 17:09:17 -04:00
parent 782c0c19db
commit 2fb4eb0174
13 changed files with 35 additions and 75 deletions
+32 -7
View File
@@ -9,7 +9,6 @@ pub mod codec;
pub mod error;
pub mod metadata;
pub mod server;
pub mod service;
#[cfg(feature = "transport")]
pub mod transport;
@@ -21,20 +20,46 @@ mod status;
pub use body::BoxBody;
pub use request::Request;
pub use response::Response;
pub use service::GrpcService;
pub use status::{Code, Status};
pub use tonic_macros::{client, server};
pub(crate) use error::Error;
use crate::body::Body;
use http_body::Body as HttpBody;
use std::future::Future;
use std::sync::Arc;
use std::task::{Context, Poll};
use tower_service::Service;
pub trait GrpcInnerService<Request> {
type Response;
type Future: Future<Output = Result<Self::Response, Status>>;
pub trait GrpcService<ReqBody> {
type ResponseBody: Body + HttpBody;
type Error: Into<crate::Error>;
fn call(self: Arc<Self>, request: Request) -> Self::Future;
type Future: Future<Output = Result<http::Response<Self::ResponseBody>, Self::Error>>;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>;
fn call(&mut self, request: http::Request<ReqBody>) -> Self::Future;
}
impl<T, ReqBody, ResBody> GrpcService<ReqBody> for T
where
T: Service<http::Request<ReqBody>, Response = http::Response<ResBody>>,
T::Error: Into<crate::Error>,
ResBody: Body + HttpBody,
<ResBody as HttpBody>::Error: Into<crate::Error>,
{
type ResponseBody = ResBody;
type Error = T::Error;
type Future = T::Future;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
Service::poll_ready(self, cx)
}
fn call(&mut self, request: http::Request<ReqBody>) -> Self::Future {
Service::call(self, request)
}
}
#[doc(hidden)]
-37
View File
@@ -1,37 +0,0 @@
use crate::body::Body;
use http::{Request, Response};
use http_body::Body as HttpBody;
use std::future::Future;
use std::task::{Context, Poll};
use tower_service::Service;
pub trait GrpcService<ReqBody> {
type ResponseBody: Body + HttpBody;
type Error: Into<crate::Error>;
type Future: Future<Output = Result<Response<Self::ResponseBody>, Self::Error>>;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>;
fn call(&mut self, request: Request<ReqBody>) -> Self::Future;
}
impl<T, ReqBody, ResBody> GrpcService<ReqBody> for T
where
T: Service<Request<ReqBody>, Response = Response<ResBody>>,
T::Error: Into<crate::Error>,
ResBody: Body + HttpBody,
<ResBody as HttpBody>::Error: Into<crate::Error>,
{
type ResponseBody = ResBody;
type Error = T::Error;
type Future = T::Future;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
Service::poll_ready(self, cx)
}
fn call(&mut self, request: Request<ReqBody>) -> Self::Future {
Service::call(self, request)
}
}
-24
View File
@@ -1,24 +0,0 @@
use tower_make::MakeService;
use tower_service::Service;
#[derive(Debug)]
pub struct Reconnect<M> {
inner: M,
}
impl<M, Target, Request> Service<Target> for Reconnect<M>
where
M: MakeService<Target, Request>,
{
type Response = M::Response;
type Error = M::Error;
type Future = M::Future;
fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
self.inner.poll_ready(cx)
}
fn call(&mut self, req: Target) -> Self::Future {
unimplmented!()
}
}
+2 -4
View File
@@ -1,7 +1,5 @@
use crate::{
body::BoxBody,
service::{AddOrigin, BoxService, GrpcService, ServiceList},
};
use super::service::{AddOrigin, BoxService, ServiceList};
use crate::{BoxBody, GrpcService};
use futures_util::try_future::{MapErr, TryFutureExt};
use http::Uri;
use hyper::client::conn;
+1
View File
@@ -3,6 +3,7 @@ mod channel;
mod openssl;
#[cfg(feature = "rustls")]
mod rustls;
mod service;
pub use self::channel::Channel;
@@ -1,7 +1,5 @@
mod add_origin;
mod boxed;
mod grpc;
// mod reconnect;
mod connect;
mod connector;
mod discover;
@@ -11,4 +9,3 @@ mod tls;
pub use self::add_origin::AddOrigin;
pub use self::boxed::BoxService;
pub use self::discover::ServiceList;
pub use self::grpc::GrpcService;