From 2fb4eb0174bbdf853f2294178b852c7e532e3e1e Mon Sep 17 00:00:00 2001 From: Lucio Franco Date: Mon, 2 Sep 2019 17:09:17 -0400 Subject: [PATCH] Move service into transport --- tonic/src/lib.rs | 39 +++++++++++++++---- tonic/src/service/grpc.rs | 37 ------------------ tonic/src/service/reconnect.rs | 24 ------------ tonic/src/transport/channel.rs | 6 +-- tonic/src/transport/mod.rs | 1 + .../src/{ => transport}/service/add_origin.rs | 0 tonic/src/{ => transport}/service/boxed.rs | 0 tonic/src/{ => transport}/service/connect.rs | 0 .../src/{ => transport}/service/connector.rs | 0 tonic/src/{ => transport}/service/discover.rs | 0 tonic/src/{ => transport}/service/io.rs | 0 tonic/src/{ => transport}/service/mod.rs | 3 -- tonic/src/{ => transport}/service/tls/mod.rs | 0 13 files changed, 35 insertions(+), 75 deletions(-) delete mode 100644 tonic/src/service/grpc.rs delete mode 100644 tonic/src/service/reconnect.rs rename tonic/src/{ => transport}/service/add_origin.rs (100%) rename tonic/src/{ => transport}/service/boxed.rs (100%) rename tonic/src/{ => transport}/service/connect.rs (100%) rename tonic/src/{ => transport}/service/connector.rs (100%) rename tonic/src/{ => transport}/service/discover.rs (100%) rename tonic/src/{ => transport}/service/io.rs (100%) rename tonic/src/{ => transport}/service/mod.rs (76%) rename tonic/src/{ => transport}/service/tls/mod.rs (100%) diff --git a/tonic/src/lib.rs b/tonic/src/lib.rs index 70a58a7..4ed7a36 100644 --- a/tonic/src/lib.rs +++ b/tonic/src/lib.rs @@ -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 { - type Response; - type Future: Future>; +pub trait GrpcService { + type ResponseBody: Body + HttpBody; + type Error: Into; - fn call(self: Arc, request: Request) -> Self::Future; + type Future: Future, Self::Error>>; + + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll>; + + fn call(&mut self, request: http::Request) -> Self::Future; +} + +impl GrpcService for T +where + T: Service, Response = http::Response>, + T::Error: Into, + ResBody: Body + HttpBody, + ::Error: Into, +{ + type ResponseBody = ResBody; + type Error = T::Error; + type Future = T::Future; + + fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { + Service::poll_ready(self, cx) + } + + fn call(&mut self, request: http::Request) -> Self::Future { + Service::call(self, request) + } } #[doc(hidden)] diff --git a/tonic/src/service/grpc.rs b/tonic/src/service/grpc.rs deleted file mode 100644 index aa28015..0000000 --- a/tonic/src/service/grpc.rs +++ /dev/null @@ -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 { - type ResponseBody: Body + HttpBody; - type Error: Into; - - type Future: Future, Self::Error>>; - - fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll>; - - fn call(&mut self, request: Request) -> Self::Future; -} - -impl GrpcService for T -where - T: Service, Response = Response>, - T::Error: Into, - ResBody: Body + HttpBody, - ::Error: Into, -{ - type ResponseBody = ResBody; - type Error = T::Error; - type Future = T::Future; - - fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - Service::poll_ready(self, cx) - } - - fn call(&mut self, request: Request) -> Self::Future { - Service::call(self, request) - } -} diff --git a/tonic/src/service/reconnect.rs b/tonic/src/service/reconnect.rs deleted file mode 100644 index 086a234..0000000 --- a/tonic/src/service/reconnect.rs +++ /dev/null @@ -1,24 +0,0 @@ -use tower_make::MakeService; -use tower_service::Service; - -#[derive(Debug)] -pub struct Reconnect { - inner: M, -} - -impl Service for Reconnect -where - M: MakeService, -{ - type Response = M::Response; - type Error = M::Error; - type Future = M::Future; - - fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll> { - self.inner.poll_ready(cx) - } - - fn call(&mut self, req: Target) -> Self::Future { - unimplmented!() - } -} diff --git a/tonic/src/transport/channel.rs b/tonic/src/transport/channel.rs index 49961cc..df600e4 100644 --- a/tonic/src/transport/channel.rs +++ b/tonic/src/transport/channel.rs @@ -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; diff --git a/tonic/src/transport/mod.rs b/tonic/src/transport/mod.rs index b40c6f3..c3c6ddc 100644 --- a/tonic/src/transport/mod.rs +++ b/tonic/src/transport/mod.rs @@ -3,6 +3,7 @@ mod channel; mod openssl; #[cfg(feature = "rustls")] mod rustls; +mod service; pub use self::channel::Channel; diff --git a/tonic/src/service/add_origin.rs b/tonic/src/transport/service/add_origin.rs similarity index 100% rename from tonic/src/service/add_origin.rs rename to tonic/src/transport/service/add_origin.rs diff --git a/tonic/src/service/boxed.rs b/tonic/src/transport/service/boxed.rs similarity index 100% rename from tonic/src/service/boxed.rs rename to tonic/src/transport/service/boxed.rs diff --git a/tonic/src/service/connect.rs b/tonic/src/transport/service/connect.rs similarity index 100% rename from tonic/src/service/connect.rs rename to tonic/src/transport/service/connect.rs diff --git a/tonic/src/service/connector.rs b/tonic/src/transport/service/connector.rs similarity index 100% rename from tonic/src/service/connector.rs rename to tonic/src/transport/service/connector.rs diff --git a/tonic/src/service/discover.rs b/tonic/src/transport/service/discover.rs similarity index 100% rename from tonic/src/service/discover.rs rename to tonic/src/transport/service/discover.rs diff --git a/tonic/src/service/io.rs b/tonic/src/transport/service/io.rs similarity index 100% rename from tonic/src/service/io.rs rename to tonic/src/transport/service/io.rs diff --git a/tonic/src/service/mod.rs b/tonic/src/transport/service/mod.rs similarity index 76% rename from tonic/src/service/mod.rs rename to tonic/src/transport/service/mod.rs index 67b5a6c..be08e4e 100644 --- a/tonic/src/service/mod.rs +++ b/tonic/src/transport/service/mod.rs @@ -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; diff --git a/tonic/src/service/tls/mod.rs b/tonic/src/transport/service/tls/mod.rs similarity index 100% rename from tonic/src/service/tls/mod.rs rename to tonic/src/transport/service/tls/mod.rs