1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
use enumflags2::{bitflags, BitFlags};
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use super::user::User;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub enum PresenceUpdateStatus {
#[serde(rename = "online")]
Online,
#[serde(rename = "idle")]
Idle,
#[serde(rename = "dnd")]
Dnd,
#[serde(rename = "offline")]
Offline,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ClientStatus {
pub desktop: Option<String>,
pub mobile: Option<String>,
pub web: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PresenceUpdate {
pub user: User,
pub guild_id: String,
pub status: PresenceUpdateStatus,
pub activities: Vec<Activity>,
pub client_status: ClientStatus,
}
#[derive(Debug, Clone, Deserialize_repr, Serialize_repr)]
#[repr(u8)]
pub enum ActivityTypes {
Game = 0,
Streaming = 1,
Listening = 2,
Watching = 3,
Custom = 4,
Competing = 5,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActivityTimestamps {
pub start: Option<i64>,
pub end: Option<i64>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActivityEmoji {
pub name: String,
pub id: Option<String>,
pub animated: Option<bool>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActivityParty {
pub id: Option<String>,
/// [current_size, max_size]
pub size: Option<Vec<i64>>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActivityAssets {
pub large_image: Option<String>,
pub large_text: Option<String>,
pub small_image: Option<String>,
pub small_text: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActivitySecrets {
pub join: Option<String>,
pub spectate: Option<String>,
#[serde(rename = "match")]
pub match_: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct ActivityButtons {
pub label: String,
pub url: String,
}
#[bitflags]
#[repr(u64)]
#[derive(Debug, Clone, Copy)]
pub enum ActivityFlags {
Instance = 1 << 0,
Join = 1 << 1,
Spectate = 1 << 2,
JoinRequest = 1 << 3,
Sync = 1 << 4,
Play = 1 << 5,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Activity {
pub name: String,
#[serde(rename = "type")]
pub type_: ActivityTypes,
pub url: Option<String>,
pub created_at: String,
pub timestamps: Option<ActivityTimestamps>,
pub application_id: Option<String>,
pub details: Option<String>,
pub state: Option<String>,
pub emoji: Option<ActivityEmoji>,
pub party: Option<ActivityParty>,
pub assets: Option<ActivityAssets>,
pub secrets: Option<ActivitySecrets>,
pub instance: Option<bool>,
pub flags: Option<BitFlags<ActivityFlags>>,
pub buttons: Option<Vec<ActivityButtons>>,
}
|