rsiot/components_config/websocket_client/
config.rs1use crate::{components_config::websocket_general::WebsocketMessage, serde_utils::SerdeAlgKind};
4
5pub type FnClientToServer<TMsg, TClientToServer> = fn(&TMsg) -> Option<TClientToServer>;
7
8pub type FnServerToClient<TMsg, TServerToClient> = fn(TServerToClient) -> Vec<TMsg>;
10
11#[derive(Clone, Debug)]
14pub struct Config<TMsg, TServerToClient, TClientToServer>
15where
16 TServerToClient: WebsocketMessage,
17 TClientToServer: WebsocketMessage,
18{
19 pub serde_alg: SerdeAlgKind,
21
22 pub url: String,
35
36 pub fn_client_to_server: FnClientToServer<TMsg, TClientToServer>,
38
39 pub fn_server_to_client: FnServerToClient<TMsg, TServerToClient>,
41
42 pub fn_connection_state: fn(bool) -> Option<TMsg>,
50}
51impl<TMsg, TServerToClient, TClientToServer> Default
54 for Config<TMsg, TServerToClient, TClientToServer>
55where
56 TServerToClient: WebsocketMessage,
57 TClientToServer: WebsocketMessage,
58{
59 fn default() -> Self {
60 Self {
61 serde_alg: SerdeAlgKind::Unspecified,
62 url: "ws://localhost:8000".into(),
63 fn_client_to_server: |_| None,
64 fn_server_to_client: |_| vec![],
65 fn_connection_state: |_| None,
66 }
67 }
68}
69
70#[cfg(test)]
71#[allow(unused_variables, clippy::field_reassign_with_default)]
72mod tests {
73 use serde::{Deserialize, Serialize};
74 use strum::IntoStaticStr;
75
76 use super::*;
77 use crate::message::example_message::*;
78
79 #[test]
80 fn fn_connection_state() {
81 let fn_connection_state_1 = |_| None;
83
84 #[derive(Clone, Debug, Deserialize, IntoStaticStr, Serialize)]
85 enum ServerToClient {}
86 impl WebsocketMessage for ServerToClient {}
87
88 #[derive(Clone, Debug, Deserialize, IntoStaticStr, Serialize)]
89 enum ClientToServer {}
90 impl WebsocketMessage for ClientToServer {}
91
92 let mut config_1: Config<Custom, ServerToClient, ClientToServer> = Default::default();
93 config_1.fn_connection_state = fn_connection_state_1;
94 }
95}