rsiot/components_config/mqtt_client/
mqtt_msg_gen.rs1use serde::{de::DeserializeOwned, Serialize};
2
3use crate::serde_utils::{self, SerdeAlg};
4
5use super::MqttMsg;
6
7#[derive(Clone)]
9pub struct MqttMsgGen {
10 pub serde_alg: SerdeAlg,
12}
13
14impl MqttMsgGen {
15 pub fn ser<TPayload>(
17 &self,
18 topic: &str,
19 retain: bool,
20 payload: &TPayload,
21 ) -> Result<MqttMsg, serde_utils::Error>
22 where
23 TPayload: Serialize,
24 {
25 let payload = self.serde_alg.serialize(payload)?;
26 let mqtt_msg = MqttMsg {
27 topic: topic.into(),
28 retain,
29 payload,
30 };
31 Ok(mqtt_msg)
32 }
33
34 pub fn de<TPayload>(&self, payload: &[u8]) -> Result<TPayload, serde_utils::Error>
36 where
37 TPayload: DeserializeOwned,
38 {
39 self.serde_alg.deserialize(payload)
40 }
41}