use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::models::payloads::guild::APIGuildMember;
use crate::models::payloads::user::APIUser;
pub use GuildScheduledEventRecurrenceRuleNWeekday as _Deprecated_GuildScheduledEventRecurrenceRuleNWeekday;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildScheduledEventBase {
pub id: String,
pub guild_id: String,
pub creator_id: Option<Option<String>>,
pub name: String,
pub description: Option<Option<String>>,
pub scheduled_start_time: String,
pub scheduled_end_time: Option<String>,
pub privacy_level: GuildScheduledEventPrivacyLevel,
pub status: GuildScheduledEventStatus,
pub entity_type: GuildScheduledEventEntityType,
pub entity_id: Option<String>,
pub creator: Option<APIUser>,
pub user_count: Option<i64>,
pub image: Option<Option<String>>,
pub recurrence_rule: Option<Option<APIGuildScheduledEventRecurrenceRule>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildScheduledEventRecurrenceRule {
pub start: String,
pub end: Option<String>,
pub frequency: GuildScheduledEventRecurrenceRuleFrequency,
pub interval: i64,
pub by_weekday: Option<Vec<GuildScheduledEventRecurrenceRuleWeekday>>,
pub by_n_weekday: Option<Vec<APIGuildScheduledEventRecurrenceRuleNWeekday>>,
pub by_month: Option<Vec<GuildScheduledEventRecurrenceRuleMonth>>,
pub by_month_day: Option<Vec<i64>>,
pub by_year_day: Option<Vec<i64>>,
pub count: Option<i64>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildScheduledEventRecurrenceRuleFrequency {
Yearly = 0,
Monthly = 1,
Weekly = 2,
Daily = 3,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildScheduledEventRecurrenceRuleWeekday {
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 3,
Friday = 4,
Saturday = 5,
Sunday = 6,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildScheduledEventRecurrenceRuleMonth {
January = 1,
February = 2,
March = 3,
April = 4,
May = 5,
June = 6,
July = 7,
August = 8,
September = 9,
October = 10,
November = 11,
December = 12,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildScheduledEventRecurrenceRuleNWeekday {
pub n: u8,
pub day: GuildScheduledEventRecurrenceRuleWeekday,
}
pub type GuildScheduledEventRecurrenceRuleNWeekday = APIGuildScheduledEventRecurrenceRuleNWeekday;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIStageInstanceGuildScheduledEvent {
pub id: String,
pub guild_id: String,
pub channel_id: String,
pub creator_id: Option<Option<String>>,
pub name: String,
pub description: Option<Option<String>>,
pub scheduled_start_time: String,
pub scheduled_end_time: Option<String>,
pub privacy_level: GuildScheduledEventPrivacyLevel,
pub status: GuildScheduledEventStatus,
pub entity_type: GuildScheduledEventEntityType,
pub entity_id: Option<String>,
pub entity_metadata: Option<()>,
pub creator: Option<APIUser>,
pub user_count: Option<i64>,
pub image: Option<Option<String>>,
pub recurrence_rule: Option<Option<APIGuildScheduledEventRecurrenceRule>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIVoiceGuildScheduledEvent {
pub id: String,
pub guild_id: String,
pub channel_id: String,
pub creator_id: Option<Option<String>>,
pub name: String,
pub description: Option<Option<String>>,
pub scheduled_start_time: String,
pub scheduled_end_time: Option<String>,
pub privacy_level: GuildScheduledEventPrivacyLevel,
pub status: GuildScheduledEventStatus,
pub entity_type: GuildScheduledEventEntityType,
pub entity_id: Option<String>,
pub entity_metadata: Option<()>,
pub creator: Option<APIUser>,
pub user_count: Option<i64>,
pub image: Option<Option<String>>,
pub recurrence_rule: Option<Option<APIGuildScheduledEventRecurrenceRule>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIExternalGuildScheduledEvent {
pub id: String,
pub guild_id: String,
pub channel_id: Option<()>,
pub creator_id: Option<Option<String>>,
pub name: String,
pub description: Option<Option<String>>,
pub scheduled_start_time: String,
pub scheduled_end_time: Option<String>,
pub privacy_level: GuildScheduledEventPrivacyLevel,
pub status: GuildScheduledEventStatus,
pub entity_type: GuildScheduledEventEntityType,
pub entity_id: Option<String>,
pub entity_metadata: APIGuildScheduledEventEntityMetadataRequired,
pub creator: Option<APIUser>,
pub user_count: Option<i64>,
pub image: Option<Option<String>>,
pub recurrence_rule: Option<Option<APIGuildScheduledEventRecurrenceRule>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum APIGuildScheduledEvent {
APIExternalGuildScheduledEvent(APIExternalGuildScheduledEvent),
APIStageInstanceGuildScheduledEvent(APIStageInstanceGuildScheduledEvent),
APIVoiceGuildScheduledEvent(APIVoiceGuildScheduledEvent),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildScheduledEventEntityMetadata {
pub location: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildScheduledEventEntityMetadataRequired {
pub location: String,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildScheduledEventEntityType {
StageInstance = 1,
Voice = 2,
External = 3,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildScheduledEventStatus {
Scheduled = 1,
Active = 2,
Completed = 3,
Canceled = 4,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildScheduledEventPrivacyLevel {
GuildOnly = 2,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildScheduledEventUser {
pub guild_scheduled_event_id: String,
pub user: APIUser,
pub member: Option<APIGuildMember>,
}