discord_presence/models/
payload.rs1use super::{Command, Event, Message};
2use serde::{de::DeserializeOwned, Serialize};
3
4#[derive(Debug, PartialEq, Eq, Deserialize, Serialize)]
6pub struct Payload<T>
7where
8 T: Serialize,
9{
10 pub cmd: Command,
12
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub args: Option<T>,
16
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub data: Option<T>,
20
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub evt: Option<Event>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub nonce: Option<String>,
28}
29
30impl<T> Payload<T>
31where
32 T: Serialize,
33{
34 pub fn with_nonce(cmd: Command, args: Option<T>, data: Option<T>, evt: Option<Event>) -> Self {
36 Self {
37 cmd,
38 args,
39 data,
40 evt,
41 nonce: Some(crate::nonce()),
42 }
43 }
44}
45
46impl<T> From<Message> for Payload<T>
47where
48 T: Serialize + DeserializeOwned,
49{
50 fn from(message: Message) -> Self {
51 serde_json::from_str(&message.payload).unwrap()
52 }
53}