ncomm_core/
update_client_server.rs1#[cfg(feature = "alloc")]
10use alloc::vec::Vec;
11#[cfg(feature = "std")]
12use std::vec::Vec;
13
14pub trait UpdateClient {
16 type Request;
18 type Update;
20 type Response;
22 type Error;
25
26 #[allow(clippy::type_complexity)]
28 fn send_request(&mut self, request: Self::Request) -> Result<(), Self::Error>;
29
30 #[allow(clippy::type_complexity)]
32 fn poll_for_update(&mut self) -> Result<Option<(Self::Request, Self::Update)>, Self::Error>;
33
34 #[cfg(any(feature = "alloc", feature = "std"))]
35 #[allow(clippy::type_complexity)]
37 fn poll_for_updates(&mut self) -> Vec<Result<(Self::Request, Self::Update), Self::Error>>;
38
39 #[allow(clippy::type_complexity)]
41 fn poll_for_response(&mut self)
42 -> Result<Option<(Self::Request, Self::Response)>, Self::Error>;
43
44 #[cfg(any(feature = "alloc", feature = "std"))]
45 #[allow(clippy::type_complexity)]
47 fn poll_for_responses(&mut self) -> Vec<Result<(Self::Request, Self::Response), Self::Error>>;
48}
49
50pub trait UpdateServer {
52 type Request: Clone;
54 type Update;
56 type Response;
58 type Key;
60 type Error;
63
64 #[allow(clippy::type_complexity)]
66 fn poll_for_request(&mut self) -> Result<Option<(Self::Key, Self::Request)>, Self::Error>;
67
68 #[cfg(any(feature = "alloc", feature = "std"))]
69 #[allow(clippy::type_complexity)]
71 fn poll_for_requests(&mut self) -> Vec<Result<(Self::Key, Self::Request), Self::Error>>;
72
73 fn send_update(
75 &mut self,
76 client_key: Self::Key,
77 request: &Self::Request,
78 update: Self::Update,
79 ) -> Result<(), Self::Error>;
80
81 #[cfg(any(feature = "alloc", feature = "std"))]
82 #[allow(clippy::type_complexity)]
84 fn send_updates(
85 &mut self,
86 mut updates: Vec<(Self::Key, &Self::Request, Self::Update)>,
87 ) -> Vec<Result<(), Self::Error>> {
88 updates
89 .drain(..)
90 .map(|update| self.send_update(update.0, update.1, update.2))
91 .collect()
92 }
93
94 fn send_response(
96 &mut self,
97 client_key: Self::Key,
98 request: Self::Request,
99 response: Self::Response,
100 ) -> Result<(), Self::Error>;
101
102 #[cfg(any(feature = "alloc", feature = "std"))]
103 #[allow(clippy::type_complexity)]
105 fn send_responses(
106 &mut self,
107 mut responses: Vec<(Self::Key, Self::Request, Self::Response)>,
108 ) -> Vec<Result<(), Self::Error>> {
109 responses
110 .drain(..)
111 .map(|response| self.send_response(response.0, response.1, response.2))
112 .collect()
113 }
114}