rsiot_components_config/websocket_client/
mod.rs

1use url::Url;
2
3use rsiot_messages_core::Message;
4
5pub type FnOutput<TMsg> = fn(&str) -> anyhow::Result<Option<Vec<Message<TMsg>>>>;
6
7/// Настройки Websocket-клиента
8#[derive(Clone, Debug)]
9pub struct Config<TMsg> {
10    /// Адрес Websocket-сервера
11    pub url: Url,
12
13    /// Преобразование входящих сообщений в текст для отправки на сервер
14    ///
15    /// # Примеры
16    ///
17    /// ## Заглушка
18    ///
19    /// ```rust
20    /// |_: &Message<TMsg>| Ok(None)
21    /// ```
22    ///
23    /// ## Сериализация в json
24    ///
25    /// ```rust
26    /// |msg: &Message<ExampleMessage>| {
27    ///     let text = msg.serialize()?;
28    ///     Ok(Some(text))
29    /// }
30    /// ```
31    pub fn_input: fn(&Message<TMsg>) -> anyhow::Result<Option<String>>,
32
33    /// Преобразование полученного от сервера текста в исходящие сообщения
34    ///
35    /// # Примеры
36    ///
37    /// ## Заглушка
38    ///
39    /// ```rust
40    /// |_: &str| Ok(vec![])
41    /// ```
42    ///
43    /// ## Десериализация из json:
44    ///
45    /// ```rust
46    /// # use rsiot_messages::ExampleMessage as Message;
47    /// |text: &str| {
48    ///     let msg = Message::deserialize(text)?;
49    ///     Ok(Some(vec![msg]))
50    /// }
51    /// # ;
52    /// ```
53    pub fn_output: FnOutput<TMsg>,
54}