Skip to main content

twilight_model/gateway/presence/
activity.rs

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