2022-02-03 09:52:53 -05:00
|
|
|
use std::convert::From;
|
2018-04-05 20:12:59 -04:00
|
|
|
|
2022-02-03 09:52:53 -05:00
|
|
|
use serde::{de::DeserializeOwned, Serialize};
|
2018-04-05 20:12:59 -04:00
|
|
|
use serde_json;
|
|
|
|
|
|
|
|
use super::{Command, Event, Message};
|
2022-02-03 15:56:37 -05:00
|
|
|
use crate::utils;
|
2018-04-05 20:12:59 -04:00
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Deserialize, Serialize)]
|
|
|
|
pub struct Payload<T>
|
2022-02-03 09:52:53 -05:00
|
|
|
where
|
|
|
|
T: Serialize,
|
2018-04-05 20:12:59 -04:00
|
|
|
{
|
|
|
|
pub cmd: Command,
|
|
|
|
|
|
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
|
|
pub args: Option<T>,
|
|
|
|
|
|
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
|
|
pub data: Option<T>,
|
|
|
|
|
|
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
|
|
pub evt: Option<Event>,
|
|
|
|
|
|
|
|
#[serde(skip_serializing_if = "Option::is_none")]
|
|
|
|
pub nonce: Option<String>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> Payload<T>
|
2022-02-03 09:52:53 -05:00
|
|
|
where
|
|
|
|
T: Serialize,
|
2018-04-05 20:12:59 -04:00
|
|
|
{
|
|
|
|
pub fn with_nonce(cmd: Command, args: Option<T>, data: Option<T>, evt: Option<Event>) -> Self {
|
2022-02-03 09:52:53 -05:00
|
|
|
Self {
|
|
|
|
cmd,
|
|
|
|
args,
|
|
|
|
data,
|
|
|
|
evt,
|
|
|
|
nonce: Some(utils::nonce()),
|
|
|
|
}
|
2018-04-05 20:12:59 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<T> From<Message> for Payload<T>
|
2022-02-03 09:52:53 -05:00
|
|
|
where
|
|
|
|
T: Serialize + DeserializeOwned,
|
2018-04-05 20:12:59 -04:00
|
|
|
{
|
|
|
|
fn from(message: Message) -> Self {
|
|
|
|
serde_json::from_str(&message.payload).unwrap()
|
|
|
|
}
|
|
|
|
}
|