botx_api/api/models/
mention.rs1use serde::{Serialize, Deserialize};
2use uuid::Uuid;
3
4#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
5#[builder(setter(into, prefix = "with"))]
6pub struct Mention {
8 #[serde(skip_serializing_if = "Option::is_none")]
10 pub mention_type: Option<MentionType>,
11
12 pub mention_id: Uuid,
14
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub mention_data: Option<MentionData>
18}
19
20#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy, Default)]
21pub enum MentionType {
22 #[default]
23 #[serde(rename(serialize = "user", deserialize = "user"))]
24 User,
25 #[serde(rename(serialize = "chat", deserialize = "chat"))]
26 Chat,
27 #[serde(rename(serialize = "channel", deserialize = "channel"))]
28 Channel,
29 #[serde(rename(serialize = "contact", deserialize = "contact"))]
30 Contact,
31 #[serde(rename(serialize = "all", deserialize = "all"))]
32 All,
33}
34
35#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
37#[serde(untagged)]
38pub enum MentionData {
39 PersonMention(PersonMentionData),
41 GroupMention(GroupMentionData)
43}
44
45#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
47#[builder(setter(into, prefix = "with"))]
48pub struct PersonMentionData {
49 pub user_huid: Uuid,
51
52 pub name: String,
54
55 pub conn_type: String,
57}
58
59#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
61#[builder(setter(into, prefix = "with"))]
62pub struct GroupMentionData {
63 pub group_chat_id: Uuid,
65
66 pub name: String,
68}