rsiot/components_config/websocket_client/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 85 86 87 88 89 90 91 92 93
//! Конфигурация websocket-клиента
use crate::message::Message;
/// Преобразование полученного от сервера текста в исходящие сообщения
pub type FnOutput<TMsg> = fn(&str) -> anyhow::Result<Option<Vec<Message<TMsg>>>>;
/// Настройки Websocket-клиента
#[derive(Clone, Debug)]
pub struct Config<TMsg> {
/// Адрес Websocket-сервера
///
/// "ws://localhost:9001"
pub url: String,
/// Преобразование входящих сообщений в текст для отправки на сервер
///
/// # Примеры
///
/// ## Заглушка
///
/// ```rust
/// |_: &Message<TMsg>| Ok(None)
/// ```
///
/// ## Сериализация в json
///
/// ```rust
/// |msg: &Message<ExampleMessage>| {
/// let text = msg.serialize()?;
/// Ok(Some(text))
/// }
/// ```
pub fn_input: fn(&Message<TMsg>) -> anyhow::Result<Option<String>>,
/// Преобразование полученного от сервера текста в исходящие сообщения
///
/// # Примеры
///
/// ## Заглушка
///
/// ```rust
/// |_: &str| Ok(vec![])
/// ```
///
/// ## Десериализация из json:
///
/// ```rust
/// # use rsiot_messages::ExampleMessage as Message;
/// |text: &str| {
/// let msg = Message::deserialize(text)?;
/// Ok(Some(vec![msg]))
/// }
/// # ;
/// ```
pub fn_output: FnOutput<TMsg>,
/// Функция создает исходящее сообщение с информацией о соединении
///
/// В функцию передается состояние соединения;
/// - true - соединение установлено
/// - false - соединение разорвано
///
/// Примеры см. в тестах
pub fn_connection_state: fn(bool) -> Option<Message<TMsg>>,
}
impl<TMsg> Default for Config<TMsg> {
fn default() -> Self {
Self {
url: "".to_string(),
fn_input: |_| Ok(None),
fn_output: |_| Ok(None),
fn_connection_state: |_| None,
}
}
}
#[cfg(test)]
#[allow(unused_variables, clippy::field_reassign_with_default)]
mod tests {
use super::*;
use crate::message::example_message::*;
#[test]
fn fn_connection_state() {
// Заглушка
let fn_connection_state_1 = |_| None;
let mut config_1: Config<Custom> = Default::default();
config_1.fn_connection_state = fn_connection_state_1;
}
}