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}