rsiot/message/
msg_serde.rsuse serde::{de::DeserializeOwned, Serialize};
use super::{message::Message, MsgData};
use serde_json::{from_str as deserialize, to_string as serialize, to_string_pretty};
impl<TData> Message<TData>
where
TData: DeserializeOwned + Serialize,
{
pub fn serialize(&self) -> Result<String, super::Error> {
let json = serialize::<Self>(self);
match json {
Ok(value) => Ok(value),
Err(error) => {
let error = error.to_string();
Err(super::Error::Serialization(error))
}
}
}
pub fn serialize_json_pretty(&self) -> Result<String, super::Error> {
let json = to_string_pretty::<Self>(self);
match json {
Ok(value) => Ok(value),
Err(error) => {
let error = error.to_string();
Err(super::Error::Serialization(error))
}
}
}
pub fn serialize_data(&self) -> Result<String, super::Error> {
let json = serialize::<MsgData<TData>>(&self.data);
match json {
Ok(value) => Ok(value),
Err(error) => {
let error = error.to_string();
Err(super::Error::Serialization(error))
}
}
}
pub fn deserialize(text: &str) -> Result<Self, super::Error> {
match deserialize::<Self>(text) {
Ok(value) => Ok(value),
Err(error) => {
let error = error.to_string();
let data = text.to_string();
Err(super::Error::Deserialization { error, data })
}
}
}
pub fn deserialize_many(text: &str) -> Result<Vec<Self>, super::Error> {
match deserialize::<Vec<Self>>(text) {
Ok(value) => Ok(value),
Err(error) => {
let error = error.to_string();
let data = text.to_string();
Err(super::Error::Deserialization { error, data })
}
}
}
}