use crate::client::{encode_path_segment, Client};
use crate::idempotency::IdempotencyKey;
use crate::models::common::ListParams;
use crate::models::payment::{
Balance, CreatePaymentRequest, ListPaymentsParams, Payment, SearchPaymentsParams,
};
#[derive(Debug, Clone, Copy)]
pub struct Payments<'c> {
client: &'c Client,
}
impl<'c> Payments<'c> {
pub(crate) fn new(client: &'c Client) -> Self {
Self { client }
}
pub async fn create(
&self,
request: &CreatePaymentRequest,
idempotency_key: Option<&IdempotencyKey>,
) -> crate::Result<Payment> {
let mut req = self.client.post("/v1/payments").json(request);
if let Some(k) = idempotency_key {
req = req.idempotency_key(k);
}
req.send().await
}
pub async fn get(&self, reference: &str) -> crate::Result<Payment> {
self.client
.get(&format!("/v1/payments/{}", encode_path_segment(reference)))
.send()
.await
}
pub async fn list(&self, params: &ListPaymentsParams) -> crate::Result<Vec<Payment>> {
self.client.get("/v1/payments").query(params).send().await
}
pub async fn list_with(&self, params: &ListParams) -> crate::Result<Vec<Payment>> {
self.client.get("/v1/payments").query(params).send().await
}
pub async fn search(&self, params: &SearchPaymentsParams) -> crate::Result<Vec<Payment>> {
self.client
.get("/v1/payments/search")
.query(params)
.send()
.await
}
pub async fn trigger_push(&self, reference: &str) -> crate::Result<Payment> {
self.client
.post(&format!(
"/v1/payments/{}/push",
encode_path_segment(reference)
))
.send()
.await
}
pub async fn balance(&self) -> crate::Result<Balance> {
self.client.get("/v1/payments/balance").send().await
}
}