use chrono::{DateTime, Utc};
#[cfg(feature = "client")]
use serde::Deserialize;
use serde::Serialize;
#[cfg(feature = "utoipa")]
use utoipa::ToSchema;
#[derive(Clone, Debug, Serialize, PartialEq, Eq)]
#[cfg_attr(feature = "client", derive(Deserialize))]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[cfg_attr(feature = "bincode", derive(bincode::Encode, bincode::Decode))]
pub struct CustomEmoji {
pub id: u64,
pub guild_id: u64,
pub name: String,
pub created_by: Option<u64>,
}
#[derive(Clone, Debug, Serialize, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "client", derive(Deserialize))]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[cfg_attr(feature = "bincode", derive(bincode::Encode, bincode::Decode))]
pub struct PartialEmoji {
pub id: Option<u64>,
pub name: String,
}
impl From<CustomEmoji> for PartialEmoji {
fn from(emoji: CustomEmoji) -> Self {
Self {
id: Some(emoji.id),
name: emoji.name,
}
}
}
#[derive(Clone, Debug, Serialize, PartialEq, Eq)]
#[cfg_attr(feature = "client", derive(Deserialize))]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[cfg_attr(feature = "bincode", derive(bincode::Encode, bincode::Decode))]
pub struct Reaction {
pub message_id: u64,
pub emoji: PartialEmoji,
pub user_ids: Vec<u64>,
#[cfg_attr(feature = "bincode", bincode(with_serde))]
pub created_at: Option<Vec<DateTime<Utc>>>,
}