use serde::{Deserialize, Serialize};
use crate::{
api::{Method, Payload, PayloadError},
types::{Integer, OrderInfo, User},
};
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Deserialize, PartialOrd, PartialEq, Serialize)]
pub struct PreCheckoutQuery {
pub currency: String,
pub from: User,
pub id: String,
pub invoice_payload: String,
pub total_amount: Integer,
pub order_info: Option<OrderInfo>,
pub shipping_option_id: Option<String>,
}
#[serde_with::skip_serializing_none]
#[derive(Clone, Debug, Serialize)]
pub struct AnswerPreCheckoutQuery {
ok: bool,
pre_checkout_query_id: String,
error_message: Option<String>,
}
impl AnswerPreCheckoutQuery {
pub fn ok<T>(id: T) -> Self
where
T: Into<String>,
{
Self {
pre_checkout_query_id: id.into(),
ok: true,
error_message: None,
}
}
pub fn error<A, B>(id: A, message: B) -> Self
where
A: Into<String>,
B: Into<String>,
{
Self {
ok: false,
pre_checkout_query_id: id.into(),
error_message: Some(message.into()),
}
}
}
impl Method for AnswerPreCheckoutQuery {
type Response = bool;
fn into_payload(self) -> Result<Payload, PayloadError> {
Payload::json("answerPreCheckoutQuery", self)
}
}