use crate::{currency::Currency, error::Error, payment, Gateway};
use serde::Serialize;
impl Gateway {
pub async fn pay_with_swish<'a>(
&self,
amount: u64,
currency: &'a Currency,
reference: &'a str,
return_url: &'a str,
merchant_account: &'a str,
) -> Result<payment::Response, Error> {
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct Amount<'a> {
value: u64,
currency: &'a str,
}
let amount = Amount {
value: amount,
currency: ¤cy.to_string(),
};
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct PaymentMethod<'a> {
r#type: &'a str,
}
let payment_method = PaymentMethod { r#type: "swish" };
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct Request<'a> {
amount: Amount<'a>,
reference: &'a str,
payment_method: PaymentMethod<'a>,
return_url: &'a str,
merchant_account: &'a str,
}
let body = Request {
amount,
payment_method,
reference,
return_url,
merchant_account,
};
let url = format!("{}/v71/payments", self.base_api_url);
let res: payment::Response = self.post(&url, &body).await?;
Ok(res)
}
}