tonic/client/
service.rs
1use http_body::Body;
2use std::future::Future;
3use std::task::{Context, Poll};
4use tower_service::Service;
5
6pub trait GrpcService<ReqBody> {
14 type ResponseBody: Body;
16 type Error: Into<crate::Error>;
18 type Future: Future<Output = Result<http::Response<Self::ResponseBody>, Self::Error>>;
20
21 fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>>;
25
26 fn call(&mut self, request: http::Request<ReqBody>) -> Self::Future;
30}
31
32impl<T, ReqBody, ResBody> GrpcService<ReqBody> for T
33where
34 T: Service<http::Request<ReqBody>, Response = http::Response<ResBody>>,
35 T::Error: Into<crate::Error>,
36 ResBody: Body,
37 <ResBody as Body>::Error: Into<crate::Error>,
38{
39 type ResponseBody = ResBody;
40 type Error = T::Error;
41 type Future = T::Future;
42
43 fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
44 Service::poll_ready(self, cx)
45 }
46
47 fn call(&mut self, request: http::Request<ReqBody>) -> Self::Future {
48 Service::call(self, request)
49 }
50}