use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordEmbed {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<DateTime<Utc>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub color: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub footer: Option<DiscordEmbedFooter>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<DiscordEmbedImage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail: Option<DiscordEmbedThumbnail>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video: Option<DiscordEmbedVideo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author: Option<DiscordEmbedAuthor>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fields: Option<Vec<DiscordEmbedField>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordEmbedThumbnail {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordEmbedVideo {
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordEmbedImage {
pub url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordEmbedAuthor {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy_icon_url: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordEmbedFooter {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub proxy_icon_url: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DiscordEmbedField {
pub name: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub inline: Option<bool>,
}