use crate::messages::discord::{
DiscordEmbed, DiscordSnowflake, components::DiscordComponent, meta::DiscordMentions,
};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordMessage {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tts: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub embeds: Option<Vec<DiscordEmbed>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allowed_mentions: Option<DiscordAllowedMentions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub components: Option<Vec<DiscordComponent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payload_json: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thread_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub applied_tags: Option<Vec<i64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub poll: Option<DiscordPoll>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordAllowedMentions {
#[serde(skip_serializing_if = "Option::is_none")]
pub parse: Option<Vec<DiscordMentions>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub roles: Option<Vec<DiscordSnowflake>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub users: Option<Vec<DiscordSnowflake>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub replied_user: Option<bool>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordPoll {
pub question: DiscordPollMedia,
pub answers: Vec<DiscordPollAnswer>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_multiselect: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub layout_type: Option<u8>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordPollMedia {
pub text: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordPollAnswer {
pub answer: DiscordPollMedia,
}