use super::base::{Request, TelegramMethod};
use crate::{
client::Bot,
types::{ChatIdKind, InlineKeyboardMarkup, LinkPreviewOptions, MessageEntity, MessageOrTrue},
};
use serde::Serialize;
use serde_with::skip_serializing_none;
#[skip_serializing_none]
#[derive(Debug, Clone, Hash, PartialEq, Eq, Serialize)]
pub struct EditMessageText {
pub chat_id: Option<ChatIdKind>,
pub message_id: Option<i64>,
pub inline_message_id: Option<String>,
pub text: String,
pub parse_mode: Option<String>,
pub entities: Option<Vec<MessageEntity>>,
pub link_preview_options: Option<LinkPreviewOptions>,
pub reply_markup: Option<InlineKeyboardMarkup>,
}
impl EditMessageText {
#[must_use]
pub fn new(text: impl Into<String>) -> Self {
Self {
chat_id: None,
message_id: None,
inline_message_id: None,
text: text.into(),
parse_mode: None,
entities: None,
link_preview_options: None,
reply_markup: None,
}
}
#[must_use]
pub fn chat_id(self, val: impl Into<ChatIdKind>) -> Self {
Self {
chat_id: Some(val.into()),
..self
}
}
#[must_use]
pub fn message_id(self, val: i64) -> Self {
Self {
message_id: Some(val),
..self
}
}
#[must_use]
pub fn inline_message_id(self, val: impl Into<String>) -> Self {
Self {
inline_message_id: Some(val.into()),
..self
}
}
#[must_use]
pub fn text(self, val: impl Into<String>) -> Self {
Self {
text: val.into(),
..self
}
}
#[must_use]
pub fn parse_mode(self, val: impl Into<String>) -> Self {
Self {
parse_mode: Some(val.into()),
..self
}
}
#[must_use]
pub fn entities(self, val: impl IntoIterator<Item = MessageEntity>) -> Self {
Self {
entities: Some(
self.entities
.unwrap_or_default()
.into_iter()
.chain(val)
.collect(),
),
..self
}
}
#[must_use]
pub fn link_preview_options(self, val: LinkPreviewOptions) -> Self {
Self {
link_preview_options: Some(val),
..self
}
}
#[must_use]
pub fn reply_markup(self, val: impl Into<InlineKeyboardMarkup>) -> Self {
Self {
reply_markup: Some(val.into()),
..self
}
}
}
impl EditMessageText {
#[must_use]
pub fn chat_id_option(self, val: Option<impl Into<ChatIdKind>>) -> Self {
Self {
chat_id: val.map(Into::into),
..self
}
}
#[must_use]
pub fn message_thread_id_option(self, val: Option<i64>) -> Self {
Self {
message_id: val,
..self
}
}
#[must_use]
pub fn inline_message_id_option(self, val: Option<impl Into<String>>) -> Self {
Self {
inline_message_id: val.map(Into::into),
..self
}
}
#[must_use]
pub fn parse_mode_option(self, val: Option<impl Into<String>>) -> Self {
Self {
parse_mode: val.map(Into::into),
..self
}
}
#[must_use]
pub fn entities_option(self, val: Option<impl IntoIterator<Item = MessageEntity>>) -> Self {
Self {
entities: val.map(|val| {
self.entities
.unwrap_or_default()
.into_iter()
.chain(val)
.collect()
}),
..self
}
}
#[must_use]
pub fn link_preview_options_option(self, val: Option<LinkPreviewOptions>) -> Self {
Self {
link_preview_options: val,
..self
}
}
#[must_use]
pub fn reply_markup_option(self, val: Option<impl Into<InlineKeyboardMarkup>>) -> Self {
Self {
reply_markup: val.map(Into::into),
..self
}
}
}
impl TelegramMethod for EditMessageText {
type Method = Self;
type Return = MessageOrTrue;
fn build_request<Client>(&self, _bot: &Bot<Client>) -> Request<Self::Method> {
Request::new("editMessageText", self, None)
}
}
impl AsRef<EditMessageText> for EditMessageText {
fn as_ref(&self) -> &Self {
self
}
}