telegram_bot_async_raw/requests/
edit_message_text.rs

1use std::{borrow::Cow, ops::Not};
2
3use crate::{requests::*, types::*};
4
5/// Use this method to edit text messages sent by the bot.
6#[derive(Debug, Clone, PartialEq, PartialOrd, Serialize)]
7#[must_use = "requests do nothing unless sent"]
8pub struct EditMessageText<'s> {
9    chat_id: ChatRef,
10    message_id: MessageId,
11    text: Cow<'s, str>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    parse_mode: Option<ParseMode>,
14    #[serde(skip_serializing_if = "Not::not")]
15    disable_web_page_preview: bool,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    reply_markup: Option<ReplyMarkup>,
18}
19
20impl<'s> Request for EditMessageText<'s> {
21    type Type = JsonRequestType<Self>;
22    type Response = JsonIdResponse<Message>;
23
24    fn serialize(&self) -> Result<HttpRequest, Error> {
25        Self::Type::serialize(RequestUrl::method("editMessageText"), self)
26    }
27}
28
29impl<'s> EditMessageText<'s> {
30    pub fn new<C, M, T>(chat: C, message_id: M, text: T) -> Self
31    where
32        C: ToChatRef,
33        M: ToMessageId,
34        T: Into<Cow<'s, str>>,
35    {
36        EditMessageText {
37            chat_id: chat.to_chat_ref(),
38            message_id: message_id.to_message_id(),
39            text: text.into(),
40            parse_mode: None,
41            disable_web_page_preview: false,
42            reply_markup: None,
43        }
44    }
45
46    pub fn parse_mode(mut self, parse_mode: ParseMode) -> Self {
47        self.parse_mode = Some(parse_mode);
48        self
49    }
50
51    pub fn disable_preview(mut self) -> Self {
52        self.disable_web_page_preview = true;
53        self
54    }
55
56    pub fn reply_markup<R>(mut self, reply_markup: R) -> Self
57    where
58        R: Into<ReplyMarkup>,
59    {
60        self.reply_markup = Some(reply_markup.into());
61        self
62    }
63}
64
65/// Edit text of messages sent by the bot.
66pub trait CanEditMessageText {
67    fn edit_text<'s, T>(&self, text: T) -> EditMessageText<'s>
68    where
69        T: Into<Cow<'s, str>>;
70}
71
72impl<M> CanEditMessageText for M
73where
74    M: ToMessageId + ToSourceChat,
75{
76    fn edit_text<'s, T>(&self, text: T) -> EditMessageText<'s>
77    where
78        T: Into<Cow<'s, str>>,
79    {
80        EditMessageText::new(self.to_source_chat(), self.to_message_id(), text)
81    }
82}