twilight_model/gateway/presence/
activity.rs

1use crate::{
2    gateway::presence::{
3        ActivityAssets, ActivityButton, ActivityEmoji, ActivityFlags, ActivityParty,
4        ActivitySecrets, ActivityTimestamps, ActivityType,
5    },
6    id::{marker::ApplicationMarker, Id},
7};
8use serde::{Deserialize, Serialize};
9
10#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
11pub struct Activity {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub application_id: Option<Id<ApplicationMarker>>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub assets: Option<ActivityAssets>,
16    #[serde(default, skip_serializing_if = "Vec::is_empty")]
17    pub buttons: Vec<ActivityButton>,
18    /// Unix timestamp of when the activity was added to the user's session, in
19    /// milliseconds.
20    pub created_at: Option<u64>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub details: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub emoji: Option<ActivityEmoji>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub flags: Option<ActivityFlags>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub id: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub instance: Option<bool>,
31    #[serde(default = "ActivityType::default", rename = "type")]
32    pub kind: ActivityType,
33    pub name: String,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub party: Option<ActivityParty>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub secrets: Option<ActivitySecrets>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub state: Option<String>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub timestamps: Option<ActivityTimestamps>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub url: Option<String>,
44}
45
46#[cfg(test)]
47mod tests {
48    // Custom activities is tested by the custom presence test.
49}