protosocket_prost/
prost_socket.rs

1use std::marker::PhantomData;
2
3use protosocket::{ConnectionBindings, MessageReactor};
4
5use crate::prost_serializer::ProstSerializer;
6
7/// A convenience type for binding a `ProstSerializer` to a server-side
8/// `protosocket::Connection`.
9pub struct ProstServerConnectionBindings<Request, Response, Reactor, Stream> {
10    _phantom: PhantomData<(Request, Response, Reactor, Stream)>,
11}
12
13impl<Request, Response, Reactor, TStream> ConnectionBindings
14    for ProstServerConnectionBindings<Request, Response, Reactor, TStream>
15where
16    Request: prost::Message + Default + Unpin + 'static,
17    Response: prost::Message + Unpin + 'static,
18    Reactor: MessageReactor<Inbound = Request>,
19    TStream: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + Unpin + 'static,
20{
21    type Deserializer = ProstSerializer<Request, Response>;
22    type Serializer = ProstSerializer<Request, Response>;
23    type Reactor = Reactor;
24    type Stream = TStream;
25}
26
27/// A convenience type for binding a `ProstSerializer` to a client-side
28/// `protosocket::Connection`.
29pub struct ProstClientConnectionBindings<Request, Response, Reactor, TStream> {
30    _phantom: PhantomData<(Request, Response, Reactor, TStream)>,
31}
32
33impl<Request, Response, Reactor, TStream> ConnectionBindings
34    for ProstClientConnectionBindings<Request, Response, Reactor, TStream>
35where
36    Request: prost::Message + Default + Unpin + 'static,
37    Response: prost::Message + Default + Unpin + 'static,
38    Reactor: MessageReactor<Inbound = Response>,
39    TStream: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + Unpin + 'static,
40{
41    type Deserializer = ProstSerializer<Response, Request>;
42    type Serializer = ProstSerializer<Response, Request>;
43    type Reactor = Reactor;
44    type Stream = TStream;
45}