communication_layer_request_reply/
lib.rs

1#![cfg_attr(docsrs, feature(doc_auto_cfg))]
2
3//! Abstraction of various request/reply communication backends.
4//!
5//! Provides a [`RequestReplyLayer`] trait as an abstraction for different request/reply
6//! systems. The following set of backends are currently supported:
7//!
8//! TODO
9
10pub use tcp::*;
11
12mod tcp;
13
14/// Abstraction trait for different publisher/subscriber implementations.
15pub 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}