botx_api/api/models/
mention.rs

1use serde::{Serialize, Deserialize};
2use uuid::Uuid;
3
4#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
5#[builder(setter(into, prefix = "with"))]
6/// список меншнов 
7pub struct Mention {
8    /// (Default: “user”) - тип меншна user|chat|channel|contact|all
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub mention_type: Option<MentionType>,
11
12    /// id меншна (uuid5)
13    pub mention_id: Uuid,
14
15    /// цель mention. Для mention_type “all” - null
16    #[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/// цель mention
36#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
37#[serde(untagged)]
38pub enum MentionData {
39    /// для mention_type “user” и “contact”
40    PersonMention(PersonMentionData),
41    /// для mention_type “chat” и “channel”
42    GroupMention(GroupMentionData)
43}
44
45/// для mention_type “user” и “contact”
46#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
47#[builder(setter(into, prefix = "with"))]
48pub struct PersonMentionData {
49    /// huid пользователя которого меншат (uuid5)
50    pub user_huid: Uuid,
51
52    /// имя пользователя
53    pub name: String,
54
55    /// тип соединения контакта
56    pub conn_type: String,
57}
58
59/// для mention_type “chat” и “channel”
60#[derive(Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, Builder)]
61#[builder(setter(into, prefix = "with"))]
62pub struct GroupMentionData {
63    /// id чата
64    pub group_chat_id: Uuid,
65    
66    /// отображаемое имя чата (uuid5)
67    pub name: String,
68}