titanium_model/
scheduled.rs1use crate::Snowflake;
6use crate::TitanString;
7use serde::{Deserialize, Serialize};
8use serde_repr::{Deserialize_repr, Serialize_repr};
9
10#[derive(Debug, Clone, Deserialize, Serialize)]
12pub struct ScheduledEvent<'a> {
13 pub id: Snowflake,
15
16 pub guild_id: Snowflake,
18
19 #[serde(default)]
21 pub channel_id: Option<Snowflake>,
22
23 #[serde(default)]
25 pub creator_id: Option<Snowflake>,
26
27 pub name: TitanString<'a>,
29
30 #[serde(default)]
32 pub description: Option<TitanString<'a>>,
33
34 pub scheduled_start_time: TitanString<'a>,
36
37 #[serde(default)]
39 pub scheduled_end_time: Option<TitanString<'a>>,
40
41 pub privacy_level: ScheduledEventPrivacyLevel,
43
44 pub status: ScheduledEventStatus,
46
47 pub entity_type: ScheduledEventEntityType,
49
50 #[serde(default)]
52 pub entity_id: Option<Snowflake>,
53
54 #[serde(default)]
56 pub entity_metadata: Option<ScheduledEventEntityMetadata<'a>>,
57
58 #[serde(default)]
60 pub creator: Option<super::User<'a>>,
61
62 #[serde(default)]
64 pub user_count: Option<u32>,
65
66 #[serde(default)]
68 pub image: Option<TitanString<'a>>,
69}
70
71#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr, Default)]
73#[repr(u8)]
74pub enum ScheduledEventPrivacyLevel {
75 #[default]
77 GuildOnly = 2,
78}
79
80#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
82#[repr(u8)]
83pub enum ScheduledEventStatus {
84 Scheduled = 1,
86 Active = 2,
88 Completed = 3,
90 Cancelled = 4,
92}
93
94#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize_repr, Deserialize_repr, Default)]
96#[repr(u8)]
97pub enum ScheduledEventEntityType {
98 StageInstance = 1,
100 #[default]
102 Voice = 2,
103 External = 3,
105}
106
107#[derive(Debug, Clone, Default, Deserialize, Serialize)]
109pub struct ScheduledEventEntityMetadata<'a> {
110 #[serde(default)]
112 pub location: Option<TitanString<'a>>,
113}
114
115#[derive(Debug, Clone, Deserialize, Serialize)]
117pub struct ScheduledEventUserEvent {
118 pub guild_scheduled_event_id: Snowflake,
120
121 pub user_id: Snowflake,
123
124 pub guild_id: Snowflake,
126}
127
128#[cfg(test)]
129mod tests {
130 use super::*;
131
132 #[test]
133 fn test_scheduled_event() {
134 let json = r#"{
135 "id": "123",
136 "guild_id": "456",
137 "name": "Community Event",
138 "scheduled_start_time": "2024-01-01T00:00:00.000Z",
139 "privacy_level": 2,
140 "status": 1,
141 "entity_type": 2
142 }"#;
143
144 let event: ScheduledEvent = crate::json::from_str(json).unwrap();
145 assert_eq!(event.name, TitanString::Borrowed("Community Event"));
146 assert_eq!(event.status, ScheduledEventStatus::Scheduled);
147 }
148}