serenity/model/guild/
scheduled_event.rs

1use crate::model::prelude::*;
2
3/// Information about a guild scheduled event.
4///
5/// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object).
6#[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
7#[derive(Clone, Debug, Deserialize, Serialize)]
8#[non_exhaustive]
9pub struct ScheduledEvent {
10    /// The Id of the scheduled event.
11    pub id: ScheduledEventId,
12    /// The Id of the guild that the event belongs to.
13    pub guild_id: GuildId,
14    /// The Id of the channel that the event belongs to, if any.
15    pub channel_id: Option<ChannelId>,
16    /// The Id of the User that created the scheduled event.
17    ///
18    /// Only `None` for events created before October 25th, 2021.
19    pub creator_id: Option<UserId>,
20    /// The name of the scheduled event.
21    pub name: String,
22    /// The description of the scheduled event, if any.
23    pub description: Option<String>,
24    /// The event's starting time.
25    #[serde(rename = "scheduled_start_time")]
26    pub start_time: Timestamp,
27    /// The event's ending time; optional.
28    #[serde(rename = "scheduled_end_time")]
29    pub end_time: Option<Timestamp>,
30    /// The privacy level of the scheduled event.
31    pub privacy_level: ScheduledEventPrivacyLevel,
32    /// The event's status; either Scheduled, Active, Completed, or Canceled.
33    pub status: ScheduledEventStatus,
34    /// The User that created the event.
35    ///
36    /// Only `None` for events created before October 25th, 2021.
37    pub creator: Option<User>,
38    /// The type of the event, indicating if it will take place in a Stage Instance, a Voice
39    /// Channel, or at some External location.
40    #[serde(rename = "entity_type")]
41    pub kind: ScheduledEventType,
42    /// The id of an entity associated with a guild scheduled event.
43    pub entity_id: Option<GenericId>,
44    /// Optional event location, only required for External events.
45    #[serde(rename = "entity_metadata")]
46    pub metadata: Option<ScheduledEventMetadata>,
47    /// Number of users interested in the event.
48    ///
49    /// Only populated if `with_user_count` is set to true provided when calling
50    /// [`GuildId::scheduled_event`] or [`GuildId::scheduled_events`].
51    pub user_count: Option<u64>,
52    /// The hash of the event's cover image, if present.
53    pub image: Option<ImageHash>,
54}
55
56enum_number! {
57    /// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-status).
58    #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)]
59    #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
60    #[serde(from = "u8", into = "u8")]
61    #[non_exhaustive]
62    pub enum ScheduledEventStatus {
63        Scheduled = 1,
64        Active = 2,
65        Completed = 3,
66        Canceled = 4,
67        _ => Unknown(u8),
68    }
69}
70
71enum_number! {
72    /// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-types).
73    #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)]
74    #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
75    #[serde(from = "u8", into = "u8")]
76    #[non_exhaustive]
77    pub enum ScheduledEventType {
78        StageInstance = 1,
79        Voice = 2,
80        External = 3,
81        _ => Unknown(u8),
82    }
83}
84
85/// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata).
86#[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
87#[derive(Clone, Debug, Deserialize, Serialize)]
88#[non_exhaustive]
89pub struct ScheduledEventMetadata {
90    #[serde(default)]
91    pub location: Option<String>,
92}
93
94/// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-user-object).
95#[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
96#[derive(Clone, Debug, Deserialize, Serialize)]
97#[non_exhaustive]
98pub struct ScheduledEventUser {
99    #[serde(rename = "guild_scheduled_event_id")]
100    pub event_id: ScheduledEventId,
101    pub user: User,
102    pub member: Option<Member>,
103}
104
105enum_number! {
106    /// See [`ScheduledEvent::privacy_level`].
107    ///
108    /// [Discord docs](https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-privacy-level).
109    #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Deserialize, Serialize)]
110    #[cfg_attr(feature = "typesize", derive(typesize::derive::TypeSize))]
111    #[serde(from = "u8", into = "u8")]
112    #[non_exhaustive]
113    pub enum ScheduledEventPrivacyLevel {
114        GuildOnly = 2,
115        _ => Unknown(u8),
116    }
117}