use std::{ convert::From, }; use serde::{Serialize, de::DeserializeOwned}; use serde_json; use super::{Command, Event, Message}; use utils; #[derive(Debug, PartialEq, Deserialize, Serialize)] pub struct Payload where T: Serialize { pub cmd: Command, #[serde(skip_serializing_if = "Option::is_none")] pub args: Option, #[serde(skip_serializing_if = "Option::is_none")] pub data: Option, #[serde(skip_serializing_if = "Option::is_none")] pub evt: Option, #[serde(skip_serializing_if = "Option::is_none")] pub nonce: Option, } impl Payload where T: Serialize { pub fn with_nonce(cmd: Command, args: Option, data: Option, evt: Option) -> Self { Self { cmd, args, data, evt, nonce: Some(utils::nonce()) } } } impl From for Payload where T: Serialize + DeserializeOwned { fn from(message: Message) -> Self { serde_json::from_str(&message.payload).unwrap() } }