rsiot/components_config/mqtt_client/mod.rs
1//! Настройки коммуникации с MQTT-брокером
2
3mod mqtt_msg;
4mod mqtt_msg_gen;
5
6pub use mqtt_msg::MqttMsg;
7pub use mqtt_msg_gen::MqttMsgGen;
8
9use crate::{
10 message::{Message, MsgDataBound},
11 serde_utils::SerdeAlgKind,
12};
13
14/// Преобразование входящих сообщений в данные для публикации в брокере
15pub type FnPublish<TMsg> = fn(&TMsg, &MqttMsgGen) -> anyhow::Result<Option<MqttMsg>>;
16
17/// Преобразование данных от брокера сообщений в исходящие сообщения
18pub type FnSubscribe<TMsg> =
19 fn(&MqttMsg, &MqttMsgGen) -> anyhow::Result<Option<Vec<Message<TMsg>>>>;
20
21/// Конфигурация cmp_mqtt_client
22#[derive(Clone)]
23pub struct Config<TMsg>
24where
25 TMsg: MsgDataBound,
26{
27 /// Алгоритм сериализации / десериализации
28 pub serde_alg: SerdeAlgKind,
29
30 /// Идентификатор клиента MQTT
31 pub client_id: String,
32
33 /// Адрес брокера
34 ///
35 /// Примеры:
36 /// - `localhost`
37 pub host: String,
38
39 /// Порт брокера.
40 ///
41 /// По-умолчанию - 1883
42 pub port: u16,
43
44 /// Ёмкость клиента.
45 ///
46 /// Можно задать 100
47 pub client_capacity: usize,
48
49 /// Настройка публикации данных в брокере
50 pub publish: ConfigPublish<TMsg>,
51
52 /// Настройка подписки на данные из брокера
53 pub subscribe: ConfigSubscribe<TMsg>,
54}
55
56/// Конфигурация настроек публикации на брокере
57#[derive(Clone)]
58pub enum ConfigPublish<TMsg>
59where
60 TMsg: MsgDataBound,
61{
62 /// Не публиковать
63 NoPublish,
64 /// Публиковать
65 Publish {
66 /// Функция принимает входящие сообщения и возвращает возможную структуру для публикации в
67 /// брокере
68 fn_publish: FnPublish<TMsg>,
69 },
70}
71
72/// Конфигурация настроек подписки на сообщения из брокера
73#[derive(Clone)]
74pub enum ConfigSubscribe<TMsg>
75where
76 TMsg: MsgDataBound,
77{
78 /// Не подписываться
79 NoSubscribe,
80 /// Подписаться
81 Subscribe {
82 /// Токен
83 token: String,
84 /// Функция принимает сообщения из брокера и формирует возможный массив исходящих сообщений
85 fn_subscribe: FnSubscribe<TMsg>,
86 },
87}