use std::convert::From; use serde::{de::DeserializeOwned, Serialize}; use serde_json; use super::{Command, Event, Message}; use crate::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() } }