use serde::{Deserialize, Serialize};
use serde_json::Value;
use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::entities::{GuildMemberApiType, UserApiType};
use crate::resources::GuildScheduledEventApiType;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InviteApiType {
#[serde(rename = "type")]
pub type_: InviteType,
pub code: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub guild: Option<Value>, #[serde(skip_serializing_if = "Option::is_none")]
pub channel: Option<Value>, #[serde(skip_serializing_if = "Option::is_none")]
pub inviter: Option<UserApiType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_type: Option<InviteTargetType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_user: Option<UserApiType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_application: Option<Value>, #[serde(skip_serializing_if = "Option::is_none")]
pub approximate_presence_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub approximate_member_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub guild_scheduled_event: Option<GuildScheduledEventApiType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<u32>,
}
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum InviteType {
GUILD = 0,
GROUP_DM = 1,
FRIEND = 2,
}
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum InviteTargetType {
STREAM = 1,
EMBEDDED_APPLICATION = 2,
}
#[allow(non_camel_case_types)]
pub enum GuildInviteFlags {
IS_GUEST_INVITE = 1 << 0,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InviteMetadataApiType {
pub uses: u32,
pub max_uses: u32,
pub max_age: u32,
pub temporary: bool,
pub created_at: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InviteStageInstanceApiType {
pub members: Vec<GuildMemberApiType>,
pub participant_count: u32,
pub speaker_count: u32,
pub topic: String,
}