use crate::Result;
use crate::types::message::Message;
use crate::types::payment::{
AnswerPreCheckoutQueryRequest, AnswerShippingQueryRequest, CreateInvoiceLinkRequest,
SendInvoiceRequest,
};
#[cfg(feature = "_blocking")]
use crate::BlockingClient;
#[cfg(feature = "_async")]
use crate::Client;
#[cfg(feature = "_async")]
#[derive(Clone)]
pub struct PaymentsService {
client: Client,
}
#[cfg(feature = "_async")]
impl PaymentsService {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub async fn send_invoice(&self, request: &SendInvoiceRequest) -> Result<Message> {
request.validate()?;
self.client.call_method("sendInvoice", request).await
}
pub async fn create_invoice_link(&self, request: &CreateInvoiceLinkRequest) -> Result<String> {
request.validate()?;
self.client.call_method("createInvoiceLink", request).await
}
pub async fn answer_shipping_query(
&self,
request: &AnswerShippingQueryRequest,
) -> Result<bool> {
request.validate()?;
self.client
.call_method("answerShippingQuery", request)
.await
}
pub async fn answer_pre_checkout_query(
&self,
request: &AnswerPreCheckoutQueryRequest,
) -> Result<bool> {
request.validate()?;
self.client
.call_method("answerPreCheckoutQuery", request)
.await
}
}
#[cfg(feature = "_blocking")]
#[derive(Clone)]
pub struct BlockingPaymentsService {
client: BlockingClient,
}
#[cfg(feature = "_blocking")]
impl BlockingPaymentsService {
pub(crate) fn new(client: BlockingClient) -> Self {
Self { client }
}
pub fn send_invoice(&self, request: &SendInvoiceRequest) -> Result<Message> {
request.validate()?;
self.client.call_method("sendInvoice", request)
}
pub fn create_invoice_link(&self, request: &CreateInvoiceLinkRequest) -> Result<String> {
request.validate()?;
self.client.call_method("createInvoiceLink", request)
}
pub fn answer_shipping_query(&self, request: &AnswerShippingQueryRequest) -> Result<bool> {
request.validate()?;
self.client.call_method("answerShippingQuery", request)
}
pub fn answer_pre_checkout_query(
&self,
request: &AnswerPreCheckoutQueryRequest,
) -> Result<bool> {
request.validate()?;
self.client.call_method("answerPreCheckoutQuery", request)
}
}