tower_grpc/generic/server/
mod.rs1mod grpc;
2
3pub(crate) mod client_streaming;
4pub(crate) mod server_streaming;
5pub(crate) mod streaming;
6pub(crate) mod unary;
7
8pub(crate) use self::grpc::Grpc;
9
10use crate::{Request, Response};
11
12use futures::{Future, Stream};
13use tower_service::Service;
14
15pub trait StreamingService<RequestStream> {
20 type Response;
22
23 type ResponseStream: Stream<Item = Self::Response, Error = crate::Status>;
25
26 type Future: Future<Item = crate::Response<Self::ResponseStream>, Error = crate::Status>;
28
29 fn call(&mut self, request: Request<RequestStream>) -> Self::Future;
31}
32
33impl<T, S1, S2> StreamingService<S1> for T
34where
35 T: Service<Request<S1>, Response = Response<S2>, Error = crate::Status>,
36 S1: Stream<Error = crate::Status>,
37 S2: Stream<Error = crate::Status>,
38{
39 type Response = S2::Item;
40 type ResponseStream = S2;
41 type Future = T::Future;
42
43 fn call(&mut self, request: Request<S1>) -> Self::Future {
44 Service::call(self, request)
45 }
46}
47
48pub trait UnaryService<R> {
53 type Response;
55
56 type Future: Future<Item = crate::Response<Self::Response>, Error = crate::Status>;
58
59 fn call(&mut self, request: Request<R>) -> Self::Future;
61}
62
63impl<T, M1, M2> UnaryService<M1> for T
64where
65 T: Service<Request<M1>, Response = Response<M2>, Error = crate::Status>,
66{
67 type Response = M2;
68 type Future = T::Future;
69
70 fn call(&mut self, request: Request<M1>) -> Self::Future {
71 Service::call(self, request)
72 }
73}
74
75pub trait ClientStreamingService<RequestStream> {
80 type Response;
82
83 type Future: Future<Item = crate::Response<Self::Response>, Error = crate::Status>;
85
86 fn call(&mut self, request: Request<RequestStream>) -> Self::Future;
88}
89
90impl<T, M, S> ClientStreamingService<S> for T
91where
92 T: Service<Request<S>, Response = Response<M>, Error = crate::Status>,
93 S: Stream<Error = crate::Status>,
94{
95 type Response = M;
96 type Future = T::Future;
97
98 fn call(&mut self, request: Request<S>) -> Self::Future {
99 Service::call(self, request)
100 }
101}
102
103pub trait ServerStreamingService<R> {
108 type Response;
110
111 type ResponseStream: Stream<Item = Self::Response, Error = crate::Status>;
113
114 type Future: Future<Item = crate::Response<Self::ResponseStream>, Error = crate::Status>;
116
117 fn call(&mut self, request: Request<R>) -> Self::Future;
119}
120
121impl<T, M, S> ServerStreamingService<M> for T
122where
123 T: Service<Request<M>, Response = Response<S>, Error = crate::Status>,
124 S: Stream<Error = crate::Status>,
125{
126 type Response = S::Item;
127 type ResponseStream = S;
128 type Future = T::Future;
129
130 fn call(&mut self, request: Request<M>) -> Self::Future {
131 Service::call(self, request)
132 }
133}