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