use serde::Serialize;
use crate::client::{encode_path_segment, Client};
use crate::idempotency::IdempotencyKey;
use crate::models::common::ListParams;
use crate::models::payout::{Payout, PayoutFee, SendPayoutRequest};
#[derive(Debug, Clone, Copy)]
pub struct Payouts<'c> {
client: &'c Client,
}
#[derive(Debug, Clone, Serialize)]
struct FeeQuery {
amount: u64,
}
impl<'c> Payouts<'c> {
pub(crate) fn new(client: &'c Client) -> Self {
Self { client }
}
pub async fn send(
&self,
request: &SendPayoutRequest,
idempotency_key: Option<&IdempotencyKey>,
) -> crate::Result<Payout> {
let mut req = self.client.post("/v1/payouts/send").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<Payout> {
self.client
.get(&format!("/v1/payouts/{}", encode_path_segment(reference)))
.send()
.await
}
pub async fn list(&self, params: &ListParams) -> crate::Result<Vec<Payout>> {
self.client.get("/v1/payouts").query(params).send().await
}
pub async fn fee(&self, amount: u64) -> crate::Result<PayoutFee> {
self.client
.get("/v1/payouts/fee")
.query(&FeeQuery { amount })
.send()
.await
}
}