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>>>>;