use serde::{Deserialize, Serialize};
use crate::v1::types::{EmojiId, MediaId, RoomId, UserId};
#[cfg(feature = "utoipa")]
use utoipa::ToSchema;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[serde(untagged)]
pub enum Emoji {
Custom(EmojiCustom),
Unicode(EmojiUnicode),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
pub struct EmojiUnicode(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
pub struct EmojiCustom {
pub id: EmojiId,
pub name: String,
pub creator_id: UserId,
pub owner: EmojiOwner,
pub animated: bool,
pub media_id: MediaId,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[serde(tag = "owner")]
pub enum EmojiOwner {
Room {
room_id: RoomId,
},
User,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
pub struct EmojiCustomCreate {
pub name: String,
pub animated: bool,
pub media_id: MediaId,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
pub struct EmojiCustomPatch {
#[cfg_attr(feature = "utoipa", schema(required = false))]
pub name: Option<String>,
}