use serde::Serialize;
use serde_json::Value;
use super::AdvancedRequest;
#[derive(Clone, Debug, Serialize)]
pub struct AdvancedSendInvoiceRequest {
pub chat_id: crate::types::common::ChatId,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub message_thread_id: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub direct_messages_topic_id: Option<i64>,
pub title: String,
pub description: String,
pub payload: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider_token: Option<String>,
pub currency: String,
pub prices: Vec<crate::types::payment::LabeledPrice>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_tip_amount: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_tip_amounts: Option<Vec<i64>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start_parameter: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider_data: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_size: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_width: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_height: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_name: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_phone_number: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_email: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_shipping_address: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub send_phone_number_to_provider: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub send_email_to_provider: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_flexible: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub disable_notification: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub protect_content: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub allow_paid_broadcast: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub message_effect_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_post_parameters: Option<crate::types::telegram::SuggestedPostParameters>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reply_parameters: Option<crate::types::telegram::ReplyParameters>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reply_markup: Option<crate::types::telegram::InlineKeyboardMarkup>,
}
impl AdvancedSendInvoiceRequest {
pub fn new(
chat_id: impl Into<crate::types::common::ChatId>,
title: impl Into<String>,
description: impl Into<String>,
payload: impl Into<String>,
currency: impl Into<String>,
prices: Vec<crate::types::payment::LabeledPrice>,
) -> Self {
Self {
chat_id: chat_id.into(),
message_thread_id: None,
direct_messages_topic_id: None,
title: title.into(),
description: description.into(),
payload: payload.into(),
provider_token: None,
currency: currency.into(),
prices,
max_tip_amount: None,
suggested_tip_amounts: None,
start_parameter: None,
provider_data: None,
photo_url: None,
photo_size: None,
photo_width: None,
photo_height: None,
need_name: None,
need_phone_number: None,
need_email: None,
need_shipping_address: None,
send_phone_number_to_provider: None,
send_email_to_provider: None,
is_flexible: None,
disable_notification: None,
protect_content: None,
allow_paid_broadcast: None,
message_effect_id: None,
suggested_post_parameters: None,
reply_parameters: None,
reply_markup: None,
}
}
}
impl AdvancedRequest for AdvancedSendInvoiceRequest {
type Response = crate::types::message::Message;
const METHOD: &'static str = "sendInvoice";
}
#[derive(Clone, Debug, Serialize)]
pub struct AdvancedCreateInvoiceLinkRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub business_connection_id: Option<String>,
pub title: String,
pub description: String,
pub payload: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider_token: Option<String>,
pub currency: String,
pub prices: Vec<crate::types::payment::LabeledPrice>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub subscription_period: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_tip_amount: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suggested_tip_amounts: Option<Vec<i64>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider_data: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_size: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_width: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub photo_height: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_name: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_phone_number: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_email: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub need_shipping_address: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub send_phone_number_to_provider: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub send_email_to_provider: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_flexible: Option<bool>,
}
impl AdvancedCreateInvoiceLinkRequest {
pub fn new(
title: impl Into<String>,
description: impl Into<String>,
payload: impl Into<String>,
currency: impl Into<String>,
prices: Vec<crate::types::payment::LabeledPrice>,
) -> Self {
Self {
business_connection_id: None,
title: title.into(),
description: description.into(),
payload: payload.into(),
provider_token: None,
currency: currency.into(),
prices,
subscription_period: None,
max_tip_amount: None,
suggested_tip_amounts: None,
provider_data: None,
photo_url: None,
photo_size: None,
photo_width: None,
photo_height: None,
need_name: None,
need_phone_number: None,
need_email: None,
need_shipping_address: None,
send_phone_number_to_provider: None,
send_email_to_provider: None,
is_flexible: None,
}
}
}
impl AdvancedRequest for AdvancedCreateInvoiceLinkRequest {
type Response = String;
const METHOD: &'static str = "createInvoiceLink";
}
#[derive(Clone, Debug, Serialize)]
pub struct AdvancedAnswerShippingQueryRequest {
pub shipping_query_id: String,
pub ok: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shipping_options: Option<Vec<crate::types::payment::ShippingOption>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>,
}
impl AdvancedAnswerShippingQueryRequest {
pub fn new(shipping_query_id: impl Into<String>, ok: bool) -> Self {
Self {
shipping_query_id: shipping_query_id.into(),
ok,
shipping_options: None,
error_message: None,
}
}
}
impl AdvancedRequest for AdvancedAnswerShippingQueryRequest {
type Response = Value;
const METHOD: &'static str = "answerShippingQuery";
}
#[derive(Clone, Debug, Serialize)]
pub struct AdvancedAnswerPreCheckoutQueryRequest {
pub pre_checkout_query_id: String,
pub ok: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error_message: Option<String>,
}
impl AdvancedAnswerPreCheckoutQueryRequest {
pub fn new(pre_checkout_query_id: impl Into<String>, ok: bool) -> Self {
Self {
pre_checkout_query_id: pre_checkout_query_id.into(),
ok,
error_message: None,
}
}
}
impl AdvancedRequest for AdvancedAnswerPreCheckoutQueryRequest {
type Response = Value;
const METHOD: &'static str = "answerPreCheckoutQuery";
}
#[derive(Clone, Debug, Serialize)]
pub struct AdvancedSetPassportDataErrorsRequest {
pub user_id: crate::types::common::UserId,
pub errors: Vec<crate::types::telegram::PassportElementError>,
}
impl AdvancedSetPassportDataErrorsRequest {
pub fn new(
user_id: crate::types::common::UserId,
errors: Vec<crate::types::telegram::PassportElementError>,
) -> Self {
Self { user_id, errors }
}
}
impl AdvancedRequest for AdvancedSetPassportDataErrorsRequest {
type Response = bool;
const METHOD: &'static str = "setPassportDataErrors";
}