rsiot_components_config/websocket_server/
mod.rs

1//! Конфигурация Websocket-сервера
2//!
3//! Тестирование:
4//!
5//! ```bash
6//! cargo test -p rsiot-components-config --doc websocket_server
7//! ```
8
9use rsiot_messages_core::*;
10
11/// Конфигурация Websocket-сервера
12#[derive(Clone, Debug)]
13pub struct Config<TMsg> {
14    /// Порт, через который доступен сервер
15    pub port: u16,
16
17    /// Функция преобразования входящих сообщений в текст для отправки клиенту
18    ///
19    /// # Примеры
20    ///
21    /// ## Заглушка
22    ///
23    /// ```rust
24    /// # use rsiot_components_config::websocket_server::Config;
25    /// # use rsiot_messages_core::{example_message::*, *};
26    /// # Config::<Custom> {
27    /// #    port: 8000,
28    /// fn_input: |_| Ok(None),
29    /// #    fn_output: |_| Ok(None)
30    /// # };
31    /// ```
32    ///
33    /// ## Сериализация в json
34    ///
35    /// ```
36    /// # use rsiot_components_config::websocket_server::Config;
37    /// # use rsiot_messages_core::{example_message::*, *};
38    /// # Config::<Custom> {
39    /// #    port: 8000,
40    /// fn_input: |msg: &Message<Custom>| {
41    ///     let text = msg.serialize()?;
42    ///     Ok(Some(text))
43    /// }
44    /// # ,
45    /// #    fn_output: |_| Ok(None)
46    /// # };
47    /// ```
48    ///
49    pub fn_input: fn(&Message<TMsg>) -> anyhow::Result<Option<String>>,
50
51    /// Функция преобразования текста, полученного от клиента, в исходящий поток сообщений
52    ///
53    /// # Примеры
54    ///
55    /// ## Заглушка
56    ///
57    /// ```rust
58    /// # use rsiot_components_config::websocket_server::Config;
59    /// # use rsiot_messages_core::{example_message::*, *};
60    /// # Config::<Custom> {
61    /// #    port: 8000,
62    /// #    fn_input: |_| Ok(None),
63    /// fn_output: |_| Ok(None)
64    /// # };
65    /// ```
66    ///
67    /// ## Десериализация из json:
68    /// ```rust
69    /// # use rsiot_components_config::websocket_server::Config;
70    /// # use rsiot_messages_core::{example_message::*, *};
71    /// # Config::<Custom> {
72    /// #    port: 8000,
73    /// #    fn_input: |_| Ok(None),
74    /// fn_output: |text: &str| {
75    ///     let msg = Message::<Custom>::deserialize(text)?;
76    ///     Ok::<Option<Vec<Message<Custom>>>, anyhow::Error>(Some(vec![msg]))
77    /// }
78    /// # };
79    /// ```
80    ///
81    pub fn_output: FnOutput<TMsg>,
82}
83
84pub type FnOutput<TMsg> = fn(&str) -> anyhow::Result<Option<Vec<Message<TMsg>>>>;