use serde::{Serialize, Deserialize};
use uuid::Uuid;
#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
#[builder(setter(into, prefix = "with"))]
pub struct Mention {
#[serde(skip_serializing_if = "Option::is_none")]
pub mention_type: Option<MentionType>,
pub mention_id: Uuid,
#[serde(skip_serializing_if = "Option::is_none")]
pub mention_data: Option<MentionData>
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy, Default)]
pub enum MentionType {
#[default]
#[serde(rename(serialize = "user", deserialize = "user"))]
User,
#[serde(rename(serialize = "chat", deserialize = "chat"))]
Chat,
#[serde(rename(serialize = "channel", deserialize = "channel"))]
Channel,
#[serde(rename(serialize = "contact", deserialize = "contact"))]
Contact,
#[serde(rename(serialize = "all", deserialize = "all"))]
All,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
#[serde(untagged)]
pub enum MentionData {
PersonMention(PersonMentionData),
GroupMention(GroupMentionData)
}
#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
#[builder(setter(into, prefix = "with"))]
pub struct PersonMentionData {
pub user_huid: Uuid,
pub name: String,
pub conn_type: String,
}
#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
#[builder(setter(into, prefix = "with"))]
pub struct GroupMentionData {
pub group_chat_id: Uuid,
pub name: String,
}