1use crate::chat::Location;
2use crate::user::User;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct InlineQuery {
11 pub id: String,
13 pub from: User,
15 pub query: String,
17 pub offset: String,
19 #[serde(skip_serializing_if = "Option::is_none")]
21 pub chat_type: Option<String>,
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub location: Option<Location>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
32pub struct ChosenInlineResult {
33 pub result_id: String,
35 pub from: User,
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub location: Option<Location>,
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub inline_message_id: Option<String>,
43 pub query: String,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48#[serde(tag = "type", rename_all = "snake_case")]
49pub enum InlineQueryResult {
56 Article(InlineQueryResultArticle),
58 Photo(InlineQueryResultPhoto),
60 Gif(InlineQueryResultGif),
62 Mpeg4Gif(InlineQueryResultMpeg4Gif),
64 Video(InlineQueryResultVideo),
66 Audio(InlineQueryResultAudio),
68 Voice(InlineQueryResultVoice),
70 Document(InlineQueryResultDocument),
72 Location(InlineQueryResultLocation),
74 Venue(InlineQueryResultVenue),
76 Contact(InlineQueryResultContact),
78 Game(InlineQueryResultGame),
80 CachedPhoto(InlineQueryResultCachedPhoto),
82 CachedGif(InlineQueryResultCachedGif),
84 CachedMpeg4Gif(InlineQueryResultCachedMpeg4Gif),
86 CachedSticker(InlineQueryResultCachedSticker),
88 CachedDocument(InlineQueryResultCachedDocument),
90 CachedVideo(InlineQueryResultCachedVideo),
92 CachedVoice(InlineQueryResultCachedVoice),
94 CachedAudio(InlineQueryResultCachedAudio),
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
102pub struct InlineQueryResultArticle {
103 pub id: String,
105 pub title: String,
107 pub input_message_content: InputMessageContent,
109 #[serde(skip_serializing_if = "Option::is_none")]
111 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub url: Option<String>,
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub description: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub thumbnail_url: Option<String>,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub thumbnail_width: Option<u32>,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub thumbnail_height: Option<u32>,
127}
128
129#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct InlineQueryResultPhoto {
133 pub id: String,
135 pub photo_url: String,
137 pub thumbnail_url: String,
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub photo_width: Option<u32>,
142 #[serde(skip_serializing_if = "Option::is_none")]
144 pub photo_height: Option<u32>,
145 #[serde(skip_serializing_if = "Option::is_none")]
147 pub title: Option<String>,
148 #[serde(skip_serializing_if = "Option::is_none")]
150 pub description: Option<String>,
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub caption: Option<String>,
154 #[serde(skip_serializing_if = "Option::is_none")]
156 pub parse_mode: Option<crate::message::ParseMode>,
157 #[serde(skip_serializing_if = "Option::is_none")]
159 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
160 #[serde(skip_serializing_if = "Option::is_none")]
162 pub show_caption_above_media: Option<bool>,
163 #[serde(skip_serializing_if = "Option::is_none")]
165 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
166 #[serde(skip_serializing_if = "Option::is_none")]
168 pub input_message_content: Option<InputMessageContent>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize)]
173pub struct InlineQueryResultGif {
174 pub id: String,
176 pub gif_url: String,
178 pub thumbnail_url: String,
180 #[serde(skip_serializing_if = "Option::is_none")]
182 pub gif_width: Option<u32>,
183 #[serde(skip_serializing_if = "Option::is_none")]
185 pub gif_height: Option<u32>,
186 #[serde(skip_serializing_if = "Option::is_none")]
188 pub gif_duration: Option<u32>,
189 #[serde(skip_serializing_if = "Option::is_none")]
191 pub thumbnail_mime_type: Option<String>,
192 #[serde(skip_serializing_if = "Option::is_none")]
194 pub title: Option<String>,
195 #[serde(skip_serializing_if = "Option::is_none")]
197 pub caption: Option<String>,
198 #[serde(skip_serializing_if = "Option::is_none")]
200 pub parse_mode: Option<crate::message::ParseMode>,
201 #[serde(skip_serializing_if = "Option::is_none")]
203 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
204 #[serde(skip_serializing_if = "Option::is_none")]
206 pub show_caption_above_media: Option<bool>,
207 #[serde(skip_serializing_if = "Option::is_none")]
209 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
210 #[serde(skip_serializing_if = "Option::is_none")]
212 pub input_message_content: Option<InputMessageContent>,
213}
214
215#[derive(Debug, Clone, Serialize, Deserialize)]
217pub struct InlineQueryResultMpeg4Gif {
218 pub id: String,
220 pub mpeg4_url: String,
222 pub thumbnail_url: String,
224 #[serde(skip_serializing_if = "Option::is_none")]
226 pub mpeg4_width: Option<u32>,
227 #[serde(skip_serializing_if = "Option::is_none")]
229 pub mpeg4_height: Option<u32>,
230 #[serde(skip_serializing_if = "Option::is_none")]
232 pub mpeg4_duration: Option<u32>,
233 #[serde(skip_serializing_if = "Option::is_none")]
235 pub thumbnail_mime_type: Option<String>,
236 #[serde(skip_serializing_if = "Option::is_none")]
238 pub title: Option<String>,
239 #[serde(skip_serializing_if = "Option::is_none")]
241 pub caption: Option<String>,
242 #[serde(skip_serializing_if = "Option::is_none")]
244 pub parse_mode: Option<crate::message::ParseMode>,
245 #[serde(skip_serializing_if = "Option::is_none")]
247 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
248 #[serde(skip_serializing_if = "Option::is_none")]
250 pub show_caption_above_media: Option<bool>,
251 #[serde(skip_serializing_if = "Option::is_none")]
253 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
254 #[serde(skip_serializing_if = "Option::is_none")]
256 pub input_message_content: Option<InputMessageContent>,
257}
258
259#[derive(Debug, Clone, Serialize, Deserialize)]
261pub struct InlineQueryResultVideo {
262 pub id: String,
264 pub video_url: String,
266 pub mime_type: String,
268 pub thumbnail_url: String,
270 pub title: String,
272 #[serde(skip_serializing_if = "Option::is_none")]
274 pub caption: Option<String>,
275 #[serde(skip_serializing_if = "Option::is_none")]
277 pub parse_mode: Option<crate::message::ParseMode>,
278 #[serde(skip_serializing_if = "Option::is_none")]
280 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
281 #[serde(skip_serializing_if = "Option::is_none")]
283 pub show_caption_above_media: Option<bool>,
284 #[serde(skip_serializing_if = "Option::is_none")]
286 pub video_width: Option<u32>,
287 #[serde(skip_serializing_if = "Option::is_none")]
289 pub video_height: Option<u32>,
290 #[serde(skip_serializing_if = "Option::is_none")]
292 pub video_duration: Option<u32>,
293 #[serde(skip_serializing_if = "Option::is_none")]
295 pub description: Option<String>,
296 #[serde(skip_serializing_if = "Option::is_none")]
298 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
299 #[serde(skip_serializing_if = "Option::is_none")]
301 pub input_message_content: Option<InputMessageContent>,
302}
303
304#[derive(Debug, Clone, Serialize, Deserialize)]
306pub struct InlineQueryResultAudio {
307 pub id: String,
309 pub audio_url: String,
311 pub title: String,
313 #[serde(skip_serializing_if = "Option::is_none")]
315 pub caption: Option<String>,
316 #[serde(skip_serializing_if = "Option::is_none")]
318 pub parse_mode: Option<crate::message::ParseMode>,
319 #[serde(skip_serializing_if = "Option::is_none")]
321 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
322 #[serde(skip_serializing_if = "Option::is_none")]
324 pub performer: Option<String>,
325 #[serde(skip_serializing_if = "Option::is_none")]
327 pub audio_duration: Option<u32>,
328 #[serde(skip_serializing_if = "Option::is_none")]
330 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
331 #[serde(skip_serializing_if = "Option::is_none")]
333 pub input_message_content: Option<InputMessageContent>,
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
338pub struct InlineQueryResultVoice {
339 pub id: String,
341 pub voice_url: String,
343 pub title: String,
345 #[serde(skip_serializing_if = "Option::is_none")]
347 pub caption: Option<String>,
348 #[serde(skip_serializing_if = "Option::is_none")]
350 pub parse_mode: Option<crate::message::ParseMode>,
351 #[serde(skip_serializing_if = "Option::is_none")]
353 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
354 #[serde(skip_serializing_if = "Option::is_none")]
356 pub voice_duration: Option<u32>,
357 #[serde(skip_serializing_if = "Option::is_none")]
359 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
360 #[serde(skip_serializing_if = "Option::is_none")]
362 pub input_message_content: Option<InputMessageContent>,
363}
364
365#[derive(Debug, Clone, Serialize, Deserialize)]
367pub struct InlineQueryResultDocument {
368 pub id: String,
370 pub title: String,
372 #[serde(skip_serializing_if = "Option::is_none")]
374 pub caption: Option<String>,
375 #[serde(skip_serializing_if = "Option::is_none")]
377 pub parse_mode: Option<crate::message::ParseMode>,
378 #[serde(skip_serializing_if = "Option::is_none")]
380 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
381 pub document_url: String,
383 pub mime_type: String,
385 #[serde(skip_serializing_if = "Option::is_none")]
387 pub description: Option<String>,
388 #[serde(skip_serializing_if = "Option::is_none")]
390 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
391 #[serde(skip_serializing_if = "Option::is_none")]
393 pub input_message_content: Option<InputMessageContent>,
394 #[serde(skip_serializing_if = "Option::is_none")]
396 pub thumbnail_url: Option<String>,
397 #[serde(skip_serializing_if = "Option::is_none")]
399 pub thumbnail_width: Option<u32>,
400 #[serde(skip_serializing_if = "Option::is_none")]
402 pub thumbnail_height: Option<u32>,
403}
404
405#[derive(Debug, Clone, Serialize, Deserialize)]
407pub struct InlineQueryResultLocation {
408 pub id: String,
410 pub latitude: f64,
412 pub longitude: f64,
414 pub title: String,
416 #[serde(skip_serializing_if = "Option::is_none")]
418 pub horizontal_accuracy: Option<f64>,
419 #[serde(skip_serializing_if = "Option::is_none")]
421 pub live_period: Option<u32>,
422 #[serde(skip_serializing_if = "Option::is_none")]
424 pub heading: Option<u16>,
425 #[serde(skip_serializing_if = "Option::is_none")]
427 pub proximity_alert_radius: Option<u32>,
428 #[serde(skip_serializing_if = "Option::is_none")]
430 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
431 #[serde(skip_serializing_if = "Option::is_none")]
433 pub input_message_content: Option<InputMessageContent>,
434 #[serde(skip_serializing_if = "Option::is_none")]
436 pub thumbnail_url: Option<String>,
437 #[serde(skip_serializing_if = "Option::is_none")]
439 pub thumbnail_width: Option<u32>,
440 #[serde(skip_serializing_if = "Option::is_none")]
442 pub thumbnail_height: Option<u32>,
443}
444
445#[derive(Debug, Clone, Serialize, Deserialize)]
447pub struct InlineQueryResultVenue {
448 pub id: String,
450 pub latitude: f64,
452 pub longitude: f64,
454 pub title: String,
456 pub address: String,
458 #[serde(skip_serializing_if = "Option::is_none")]
460 pub foursquare_id: Option<String>,
461 #[serde(skip_serializing_if = "Option::is_none")]
463 pub foursquare_type: Option<String>,
464 #[serde(skip_serializing_if = "Option::is_none")]
466 pub google_place_id: Option<String>,
467 #[serde(skip_serializing_if = "Option::is_none")]
469 pub google_place_type: Option<String>,
470 #[serde(skip_serializing_if = "Option::is_none")]
472 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
473 #[serde(skip_serializing_if = "Option::is_none")]
475 pub input_message_content: Option<InputMessageContent>,
476 #[serde(skip_serializing_if = "Option::is_none")]
478 pub thumbnail_url: Option<String>,
479 #[serde(skip_serializing_if = "Option::is_none")]
481 pub thumbnail_width: Option<u32>,
482 #[serde(skip_serializing_if = "Option::is_none")]
484 pub thumbnail_height: Option<u32>,
485}
486
487#[derive(Debug, Clone, Serialize, Deserialize)]
489pub struct InlineQueryResultContact {
490 pub id: String,
492 pub phone_number: String,
494 pub first_name: String,
496 #[serde(skip_serializing_if = "Option::is_none")]
498 pub last_name: Option<String>,
499 #[serde(skip_serializing_if = "Option::is_none")]
501 pub vcard: Option<String>,
502 #[serde(skip_serializing_if = "Option::is_none")]
504 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
505 #[serde(skip_serializing_if = "Option::is_none")]
507 pub input_message_content: Option<InputMessageContent>,
508 #[serde(skip_serializing_if = "Option::is_none")]
510 pub thumbnail_url: Option<String>,
511 #[serde(skip_serializing_if = "Option::is_none")]
513 pub thumbnail_width: Option<u32>,
514 #[serde(skip_serializing_if = "Option::is_none")]
516 pub thumbnail_height: Option<u32>,
517}
518
519#[derive(Debug, Clone, Serialize, Deserialize)]
521pub struct InlineQueryResultGame {
522 pub id: String,
524 pub game_short_name: String,
526 #[serde(skip_serializing_if = "Option::is_none")]
528 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
529}
530
531#[derive(Debug, Clone, Serialize, Deserialize)]
535pub struct InlineQueryResultCachedPhoto {
536 pub id: String,
538 pub photo_file_id: String,
540 #[serde(skip_serializing_if = "Option::is_none")]
542 pub title: Option<String>,
543 #[serde(skip_serializing_if = "Option::is_none")]
545 pub description: Option<String>,
546 #[serde(skip_serializing_if = "Option::is_none")]
548 pub caption: Option<String>,
549 #[serde(skip_serializing_if = "Option::is_none")]
551 pub parse_mode: Option<crate::message::ParseMode>,
552 #[serde(skip_serializing_if = "Option::is_none")]
554 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
555 #[serde(skip_serializing_if = "Option::is_none")]
557 pub show_caption_above_media: Option<bool>,
558 #[serde(skip_serializing_if = "Option::is_none")]
560 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
561 #[serde(skip_serializing_if = "Option::is_none")]
563 pub input_message_content: Option<InputMessageContent>,
564}
565
566#[derive(Debug, Clone, Serialize, Deserialize)]
568pub struct InlineQueryResultCachedGif {
569 pub id: String,
571 pub gif_file_id: String,
573 #[serde(skip_serializing_if = "Option::is_none")]
575 pub title: Option<String>,
576 #[serde(skip_serializing_if = "Option::is_none")]
578 pub caption: Option<String>,
579 #[serde(skip_serializing_if = "Option::is_none")]
581 pub parse_mode: Option<crate::message::ParseMode>,
582 #[serde(skip_serializing_if = "Option::is_none")]
584 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
585 #[serde(skip_serializing_if = "Option::is_none")]
587 pub show_caption_above_media: Option<bool>,
588 #[serde(skip_serializing_if = "Option::is_none")]
590 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
591 #[serde(skip_serializing_if = "Option::is_none")]
593 pub input_message_content: Option<InputMessageContent>,
594}
595
596#[derive(Debug, Clone, Serialize, Deserialize)]
598pub struct InlineQueryResultCachedMpeg4Gif {
599 pub id: String,
601 pub mpeg4_file_id: String,
603 #[serde(skip_serializing_if = "Option::is_none")]
605 pub title: Option<String>,
606 #[serde(skip_serializing_if = "Option::is_none")]
608 pub caption: Option<String>,
609 #[serde(skip_serializing_if = "Option::is_none")]
611 pub parse_mode: Option<crate::message::ParseMode>,
612 #[serde(skip_serializing_if = "Option::is_none")]
614 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
615 #[serde(skip_serializing_if = "Option::is_none")]
617 pub show_caption_above_media: Option<bool>,
618 #[serde(skip_serializing_if = "Option::is_none")]
620 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
621 #[serde(skip_serializing_if = "Option::is_none")]
623 pub input_message_content: Option<InputMessageContent>,
624}
625
626#[derive(Debug, Clone, Serialize, Deserialize)]
628pub struct InlineQueryResultCachedSticker {
629 pub id: String,
631 pub sticker_file_id: String,
633 #[serde(skip_serializing_if = "Option::is_none")]
635 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
636 #[serde(skip_serializing_if = "Option::is_none")]
638 pub input_message_content: Option<InputMessageContent>,
639}
640
641#[derive(Debug, Clone, Serialize, Deserialize)]
643pub struct InlineQueryResultCachedDocument {
644 pub id: String,
646 pub title: String,
648 pub document_file_id: String,
650 #[serde(skip_serializing_if = "Option::is_none")]
652 pub description: Option<String>,
653 #[serde(skip_serializing_if = "Option::is_none")]
655 pub caption: Option<String>,
656 #[serde(skip_serializing_if = "Option::is_none")]
658 pub parse_mode: Option<crate::message::ParseMode>,
659 #[serde(skip_serializing_if = "Option::is_none")]
661 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
662 #[serde(skip_serializing_if = "Option::is_none")]
664 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
665 #[serde(skip_serializing_if = "Option::is_none")]
667 pub input_message_content: Option<InputMessageContent>,
668}
669
670#[derive(Debug, Clone, Serialize, Deserialize)]
672pub struct InlineQueryResultCachedVideo {
673 pub id: String,
675 pub video_file_id: String,
677 pub title: String,
679 #[serde(skip_serializing_if = "Option::is_none")]
681 pub description: Option<String>,
682 #[serde(skip_serializing_if = "Option::is_none")]
684 pub caption: Option<String>,
685 #[serde(skip_serializing_if = "Option::is_none")]
687 pub parse_mode: Option<crate::message::ParseMode>,
688 #[serde(skip_serializing_if = "Option::is_none")]
690 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
691 #[serde(skip_serializing_if = "Option::is_none")]
693 pub show_caption_above_media: Option<bool>,
694 #[serde(skip_serializing_if = "Option::is_none")]
696 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
697 #[serde(skip_serializing_if = "Option::is_none")]
699 pub input_message_content: Option<InputMessageContent>,
700}
701
702#[derive(Debug, Clone, Serialize, Deserialize)]
704pub struct InlineQueryResultCachedVoice {
705 pub id: String,
707 pub voice_file_id: String,
709 pub title: String,
711 #[serde(skip_serializing_if = "Option::is_none")]
713 pub caption: Option<String>,
714 #[serde(skip_serializing_if = "Option::is_none")]
716 pub parse_mode: Option<crate::message::ParseMode>,
717 #[serde(skip_serializing_if = "Option::is_none")]
719 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
720 #[serde(skip_serializing_if = "Option::is_none")]
722 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
723 #[serde(skip_serializing_if = "Option::is_none")]
725 pub input_message_content: Option<InputMessageContent>,
726}
727
728#[derive(Debug, Clone, Serialize, Deserialize)]
730pub struct InlineQueryResultCachedAudio {
731 pub id: String,
733 pub audio_file_id: String,
735 #[serde(skip_serializing_if = "Option::is_none")]
737 pub caption: Option<String>,
738 #[serde(skip_serializing_if = "Option::is_none")]
740 pub parse_mode: Option<crate::message::ParseMode>,
741 #[serde(skip_serializing_if = "Option::is_none")]
743 pub caption_entities: Option<Vec<crate::message::MessageEntity>>,
744 #[serde(skip_serializing_if = "Option::is_none")]
746 pub reply_markup: Option<crate::keyboard::InlineKeyboardMarkup>,
747 #[serde(skip_serializing_if = "Option::is_none")]
749 pub input_message_content: Option<InputMessageContent>,
750}
751
752#[derive(Debug, Clone, Serialize, Deserialize)]
756#[serde(untagged)]
757pub enum InputMessageContent {
759 Text(InputTextMessageContent),
761 Rich(crate::rich_message::InputRichMessageContent),
763 Location(InputLocationMessageContent),
765 Venue(InputVenueMessageContent),
767 Contact(InputContactMessageContent),
769 Invoice(InputInvoiceMessageContent),
771}
772
773#[derive(Debug, Clone, Serialize, Deserialize)]
775pub struct InputTextMessageContent {
776 pub message_text: String,
778 #[serde(skip_serializing_if = "Option::is_none")]
780 pub parse_mode: Option<crate::message::ParseMode>,
781 #[serde(skip_serializing_if = "Option::is_none")]
783 pub entities: Option<Vec<crate::message::MessageEntity>>,
784 #[serde(skip_serializing_if = "Option::is_none")]
786 pub link_preview_options: Option<crate::message::LinkPreviewOptions>,
787}
788
789#[derive(Debug, Clone, Serialize, Deserialize)]
791pub struct InputLocationMessageContent {
792 pub latitude: f64,
794 pub longitude: f64,
796 #[serde(skip_serializing_if = "Option::is_none")]
798 pub horizontal_accuracy: Option<f64>,
799 #[serde(skip_serializing_if = "Option::is_none")]
801 pub live_period: Option<u32>,
802 #[serde(skip_serializing_if = "Option::is_none")]
804 pub heading: Option<u16>,
805 #[serde(skip_serializing_if = "Option::is_none")]
807 pub proximity_alert_radius: Option<u32>,
808}
809
810#[derive(Debug, Clone, Serialize, Deserialize)]
812pub struct InputVenueMessageContent {
813 pub latitude: f64,
815 pub longitude: f64,
817 pub title: String,
819 pub address: String,
821 #[serde(skip_serializing_if = "Option::is_none")]
823 pub foursquare_id: Option<String>,
824 #[serde(skip_serializing_if = "Option::is_none")]
826 pub foursquare_type: Option<String>,
827 #[serde(skip_serializing_if = "Option::is_none")]
829 pub google_place_id: Option<String>,
830 #[serde(skip_serializing_if = "Option::is_none")]
832 pub google_place_type: Option<String>,
833}
834
835#[derive(Debug, Clone, Serialize, Deserialize)]
837pub struct InputContactMessageContent {
838 pub phone_number: String,
840 pub first_name: String,
842 #[serde(skip_serializing_if = "Option::is_none")]
844 pub last_name: Option<String>,
845 #[serde(skip_serializing_if = "Option::is_none")]
847 pub vcard: Option<String>,
848}
849
850#[derive(Debug, Clone, Serialize, Deserialize)]
852pub struct InputInvoiceMessageContent {
853 pub title: String,
855 pub description: String,
857 pub payload: String,
859 #[serde(skip_serializing_if = "Option::is_none")]
861 pub provider_token: Option<String>,
862 pub currency: String,
864 pub prices: Vec<crate::payments::LabeledPrice>,
866 #[serde(skip_serializing_if = "Option::is_none")]
868 pub max_tip_amount: Option<u64>,
869 #[serde(skip_serializing_if = "Option::is_none")]
871 pub suggested_tip_amounts: Option<Vec<u64>>,
872 #[serde(skip_serializing_if = "Option::is_none")]
874 pub provider_data: Option<String>,
875 #[serde(skip_serializing_if = "Option::is_none")]
877 pub photo_url: Option<String>,
878 #[serde(skip_serializing_if = "Option::is_none")]
880 pub photo_size: Option<u64>,
881 #[serde(skip_serializing_if = "Option::is_none")]
883 pub photo_width: Option<u32>,
884 #[serde(skip_serializing_if = "Option::is_none")]
886 pub photo_height: Option<u32>,
887 #[serde(skip_serializing_if = "Option::is_none")]
889 pub need_name: Option<bool>,
890 #[serde(skip_serializing_if = "Option::is_none")]
892 pub need_phone_number: Option<bool>,
893 #[serde(skip_serializing_if = "Option::is_none")]
895 pub need_email: Option<bool>,
896 #[serde(skip_serializing_if = "Option::is_none")]
898 pub need_shipping_address: Option<bool>,
899 #[serde(skip_serializing_if = "Option::is_none")]
901 pub send_phone_number_to_provider: Option<bool>,
902 #[serde(skip_serializing_if = "Option::is_none")]
904 pub send_email_to_provider: Option<bool>,
905 #[serde(skip_serializing_if = "Option::is_none")]
907 pub is_flexible: Option<bool>,
908}
909
910#[derive(Debug, Clone, Serialize, Deserialize)]
914pub struct SentWebAppMessage {
915 #[serde(skip_serializing_if = "Option::is_none")]
917 pub inline_message_id: Option<String>,
918}
919
920#[derive(Debug, Clone, Serialize, Deserialize)]
924pub struct SentGuestMessage {
925 pub inline_message_id: String,
927}