rsiot/message/
msg_serde.rs1use serde::{de::DeserializeOwned, Serialize};
2
3use super::{message::Message, MsgData};
4
5use serde_json::{from_str as deserialize, to_string as serialize, to_string_pretty};
6
7impl<TData> Message<TData>
8where
9 TData: DeserializeOwned + Serialize,
10{
11 pub fn serialize(&self) -> Result<String, super::Error> {
13 let json = serialize::<Self>(self);
14 match json {
15 Ok(value) => Ok(value),
16 Err(error) => {
17 let error = error.to_string();
18 Err(super::Error::Serialization(error))
19 }
20 }
21 }
22
23 pub fn serialize_json_pretty(&self) -> Result<String, super::Error> {
25 let json = to_string_pretty::<Self>(self);
26 match json {
27 Ok(value) => Ok(value),
28 Err(error) => {
29 let error = error.to_string();
30 Err(super::Error::Serialization(error))
31 }
32 }
33 }
34
35 pub fn serialize_data(&self) -> Result<String, super::Error> {
37 let json = serialize::<MsgData<TData>>(&self.data);
38 match json {
39 Ok(value) => Ok(value),
40 Err(error) => {
41 let error = error.to_string();
42 Err(super::Error::Serialization(error))
43 }
44 }
45 }
46
47 pub fn deserialize(text: &str) -> Result<Self, super::Error> {
49 match deserialize::<Self>(text) {
50 Ok(value) => Ok(value),
51 Err(error) => {
52 let error = error.to_string();
53 let data = text.to_string();
54 Err(super::Error::Deserialization { error, data })
55 }
56 }
57 }
58
59 pub fn deserialize_many(text: &str) -> Result<Vec<Self>, super::Error> {
61 match deserialize::<Vec<Self>>(text) {
62 Ok(value) => Ok(value),
63 Err(error) => {
64 let error = error.to_string();
65 let data = text.to_string();
66 Err(super::Error::Deserialization { error, data })
67 }
68 }
69 }
70}