botx_api/bot/models/
attachment.rs1use serde::{Serialize, Deserialize};
28use uuid::Uuid;
29
30#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
31#[serde(tag = "type", content = "data")]
32pub enum Attachment{
34 #[serde(rename(serialize = "image", deserialize = "image"))]
35 Image(ImageAttachment),
36 #[serde(rename(serialize = "video", deserialize = "video"))]
37 Video(VideoAttachment),
38 #[serde(rename(serialize = "document", deserialize = "document"))]
39 Document(DocumentAttachment),
40 #[serde(rename(serialize = "voice", deserialize = "voice"))]
41 Voice(VoiceAttachment),
42 #[serde(rename(serialize = "location", deserialize = "location"))]
43 Location(LocationAttachment),
44 #[serde(rename(serialize = "contact", deserialize = "contact"))]
45 Contact(ContactAttachment),
46 #[serde(rename(serialize = "link", deserialize = "link"))]
47 Link(LinkAttachment),
48 #[serde(rename(serialize = "sticker", deserialize = "sticker"))]
49 Sticker(StickerAttachment),
50}
51
52#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
53pub struct ImageAttachment {
54 pub content: String,
56
57 pub file_name: Option<String>,
59}
60
61#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
62pub struct VideoAttachment {
63 pub content: String,
65
66 pub file_name: Option<String>,
68
69 pub duration: u32,
71}
72
73#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
74pub struct DocumentAttachment {
75 pub content: String,
77
78 pub file_name: Option<String>,
80}
81
82#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
83pub struct VoiceAttachment {
84 pub content: String,
86
87 pub duration: u32,
89}
90
91#[derive(Debug, Serialize, Deserialize)]
92pub struct LocationAttachment {
93 pub location_name: String,
95
96 pub location_address: String,
98
99 pub location_lat: f32,
101
102 pub location_lng: f32,
104}
105
106impl Eq for LocationAttachment { }
107
108impl PartialEq for LocationAttachment {
109 fn eq(&self, other: &Self) -> bool {
110 self.location_name == other.location_name && self.location_address == other.location_address && self.location_lat == other.location_lat && self.location_lng == other.location_lng
111 }
112}
113
114#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
115pub struct ContactAttachment {
116 pub file_name: String,
118
119 pub contact_name: String,
121
122 pub content: String,
124}
125
126#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
127pub struct LinkAttachment {
128 pub url: String,
130
131 pub url_title: Option<String>,
133
134 pub url_preview: Option<String>,
136
137 pub url_text: Option<String>,
139}
140
141#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
142pub struct StickerAttachment {
143 pub id: Uuid,
145
146 pub link: String,
148
149 pub pack: Uuid,
151
152 pub version: u32,
154}