communication_layer_request_reply/
lib.rs1#![cfg_attr(docsrs, feature(doc_auto_cfg))]
2
3pub use tcp::*;
11
12mod tcp;
13
14pub trait RequestReplyLayer: Send + Sync {
16 type Address;
17 type RequestData;
18 type ReplyData;
19 type Error;
20
21 #[allow(clippy::type_complexity)]
22 fn listen(
23 &mut self,
24 addr: Self::Address,
25 ) -> Result<
26 Box<
27 dyn Iterator<
28 Item = Result<
29 Box<
30 dyn ListenConnection<
31 RequestData = Self::RequestData,
32 ReplyData = Self::ReplyData,
33 Error = Self::Error,
34 >,
35 >,
36 Self::Error,
37 >,
38 >,
39 >,
40 Self::Error,
41 >;
42
43 #[allow(clippy::type_complexity)]
44 fn connect(
45 &mut self,
46 addr: Self::Address,
47 ) -> Result<
48 Box<
49 dyn RequestReplyConnection<
50 RequestData = Self::RequestData,
51 ReplyData = Self::ReplyData,
52 Error = Self::Error,
53 >,
54 >,
55 Self::Error,
56 >;
57}
58
59pub trait ListenConnection: Send + Sync {
60 type RequestData;
61 type ReplyData;
62 type Error;
63
64 #[allow(clippy::type_complexity)]
65 fn handle_next(
66 &mut self,
67 handler: Box<dyn FnOnce(Self::RequestData) -> Result<Self::ReplyData, Self::Error>>,
68 ) -> Result<(), Self::Error>;
69}
70
71pub trait RequestReplyConnection: Send + Sync {
72 type RequestData;
73 type ReplyData;
74 type Error;
75
76 fn request(&mut self, request: &Self::RequestData) -> Result<Self::ReplyData, Self::Error>;
77}