rsiot_messages_core/
msg_serde.rs

1use super::message::Message;
2
3use serde::{de::DeserializeOwned, Serialize};
4
5#[cfg(feature = "serde-json")]
6use serde_json::{from_str as deserialize, to_string as serialize};
7
8impl<TData> Message<TData>
9where
10    TData: DeserializeOwned + Serialize,
11{
12    #[cfg(not(feature = "serde-json"))]
13    pub fn serialize(&self) -> Result<String, crate::Error> {
14        let err = "Serialization feature not select".to_string();
15        Err(crate::Error::Serialization(err))
16    }
17
18    #[cfg(not(feature = "serde-json"))]
19    pub fn deserialize(_text: &str) -> Result<Self, crate::Error> {
20        let error = "Serialization feature not select".to_string();
21        let data = "".to_string();
22        Err(crate::Error::Deserialization { error, data })
23    }
24
25    /// Сериализация сообщений в json
26    #[cfg(feature = "serde-json")]
27    pub fn serialize(&self) -> Result<String, crate::Error> {
28        match serialize::<Self>(self) {
29            Ok(value) => Ok(value),
30            Err(error) => {
31                let error = error.to_string();
32                Err(crate::Error::Serialization(error))
33            }
34        }
35    }
36
37    /// Десериализация сообщений из json
38    #[cfg(feature = "serde-json")]
39    pub fn deserialize(text: &str) -> Result<Self, crate::Error> {
40        match deserialize::<Self>(text) {
41            Ok(value) => Ok(value),
42            Err(error) => {
43                let error = error.to_string();
44                let data = text.to_string();
45                Err(crate::Error::Deserialization { error, data })
46            }
47        }
48    }
49}