Skip to main content

rsiot/components_config/websocket_server/
config.rs

1use crate::serde_utils::SerdeAlgKind;
2
3use super::{WebsocketMessage, WsData};
4
5// ANCHOR: Config
6/// Конфигурация Websocket-сервера
7#[derive(Clone, Debug)]
8pub struct Config<TMsg, TServerToClient, TClientToServer>
9where
10    TServerToClient: WebsocketMessage,
11    TClientToServer: WebsocketMessage,
12{
13    /// Алгоритм сериализации и десериализации сообщений
14    pub serde_alg: SerdeAlgKind,
15
16    /// Порт, через который доступен сервер
17    pub port: u16,
18
19    /// Функция преобразования входящих сообщений в перечисление, пересылаемое по вебсокету
20    pub fn_server_to_client: FnInput<TMsg, TServerToClient>,
21
22    /// Функция перечисления, пересылаемых по вебсокету, в исходящий поток сообщений
23    pub fn_client_to_server: FnOutput<TMsg, TClientToServer>,
24}
25// ANCHOR: Config
26
27/// Функция преобразования входящих сообщений в перечисление, пересылаемое по вебсокету
28pub type FnInput<TMsg, TServerToClient> = fn(&TMsg) -> Option<WsData<TServerToClient>>;
29
30/// Функция перечисления, пересылаемых по вебсокету, в исходящий поток сообщений
31pub type FnOutput<TMsg, TClientToServer> = fn(WsData<TClientToServer>) -> Vec<TMsg>;