rsiot/components/
shared_mqtt_client.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
use tracing::warn;

use crate::{
    components_config::mqtt_client::ConfigFnInput,
    message::{Message, MsgDataBound},
};

pub fn create_topic_for_message<TMsg>(msg: &Message<TMsg>) -> String {
    let topic = msg.key.replace('-', "/").to_lowercase();
    let topic = format!("rsiot/{topic}");
    topic
}

pub fn create_payload_for_message<TMsg>(
    msg: &Message<TMsg>,
    config_fn_input: ConfigFnInput<TMsg>,
) -> Option<Vec<u8>>
where
    TMsg: MsgDataBound,
{
    let payload = (config_fn_input)(msg);

    // Ошибка выполнения fn_input
    let payload = match payload {
        Ok(payload) => payload,
        Err(err) => {
            warn!("FnInput: {err}");
            return None;
        }
    };

    // Фильтрация сообщений
    let payload = match payload {
        Some(payload) => payload,
        None => {
            return None;
        }
    };

    Some(payload)
}