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