rsiot/components_config/websocket_client/
config.rs1use crate::{
4 components_config::websocket_general::WebsocketMessage, message::Message,
5 serde_utils::SerdeAlgKind,
6};
7
8pub type FnClientToServer<TMsg, TClientToServer> = fn(&TMsg) -> Option<TClientToServer>;
10
11pub type FnServerToClient<TMsg, TServerToClient> = fn(TServerToClient) -> Vec<TMsg>;
13
14#[derive(Clone, Debug)]
16pub struct Config<TMsg, TServerToClient, TClientToServer>
17where
18 TServerToClient: WebsocketMessage,
19 TClientToServer: WebsocketMessage,
20{
21 pub serde_alg: SerdeAlgKind,
23
24 pub url: String,
27
28 pub fn_client_to_server: FnClientToServer<TMsg, TClientToServer>,
30
31 pub fn_server_to_client: FnServerToClient<TMsg, TServerToClient>,
33
34 pub fn_connection_state: fn(bool) -> Option<Message<TMsg>>,
42}
43
44impl<TMsg, TServerToClient, TClientToServer> Default
45 for Config<TMsg, TServerToClient, TClientToServer>
46where
47 TServerToClient: WebsocketMessage,
48 TClientToServer: WebsocketMessage,
49{
50 fn default() -> Self {
51 Self {
52 serde_alg: SerdeAlgKind::Json,
53 url: "ws://localhost:8000".into(),
54 fn_client_to_server: |_| None,
55 fn_server_to_client: |_| vec![],
56 fn_connection_state: |_| None,
57 }
58 }
59}
60
61#[cfg(test)]
62#[allow(unused_variables, clippy::field_reassign_with_default)]
63mod tests {
64 use serde::{Deserialize, Serialize};
65 use strum::IntoStaticStr;
66
67 use super::*;
68 use crate::message::example_message::*;
69
70 #[test]
71 fn fn_connection_state() {
72 let fn_connection_state_1 = |_| None;
74
75 #[derive(Clone, Debug, Deserialize, IntoStaticStr, Serialize)]
76 enum ServerToClient {}
77 impl WebsocketMessage for ServerToClient {}
78
79 #[derive(Clone, Debug, Deserialize, IntoStaticStr, Serialize)]
80 enum ClientToServer {}
81 impl WebsocketMessage for ClientToServer {}
82
83 let mut config_1: Config<Custom, ServerToClient, ClientToServer> = Default::default();
84 config_1.fn_connection_state = fn_connection_state_1;
85 }
86}