use super::common::*;
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct CardResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub last_4_digits: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<CardType>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct Device {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uuid: Option<String>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ElvCardAccount {
#[serde(skip_serializing_if = "Option::is_none")]
pub sort_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_4_digits: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sequence_no: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub iban: Option<String>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct Event {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<EventId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<TransactionId>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<EventType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<EventStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub installment_number: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deducted_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deducted_fee_amount: Option<f32>,
}
pub type HorizontalAccuracy = f32;
pub type Lat = f32;
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct Link {
#[serde(skip_serializing_if = "Option::is_none")]
pub rel: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub href: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_amount: Option<f32>,
}
pub type Lon = f32;
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct Product {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_label: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vat_rate: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub single_vat_amount: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_with_vat: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vat_amount: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quantity: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_price: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_with_vat: Option<f64>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct TransactionEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<EventId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<EventType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<EventStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub due_date: Option<crate::datetime::Date>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date: Option<crate::datetime::Date>,
#[serde(skip_serializing_if = "Option::is_none")]
pub installment_number: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<crate::datetime::DateTime>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct TransactionFull {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_type: Option<PaymentType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub installments_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub merchant_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vat_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tip_amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entry_mode: Option<EntryMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auth_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub product_summary: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payouts_total: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payouts_received: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payout_plan: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub foreign_transaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_transaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub fee_amount: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lat: Option<Lat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lon: Option<Lon>,
#[serde(skip_serializing_if = "Option::is_none")]
pub horizontal_accuracy: Option<HorizontalAccuracy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub merchant_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device_info: Option<Device>,
#[serde(skip_serializing_if = "Option::is_none")]
pub simple_payment_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub verification_method: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub card: Option<CardResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
pub elv_account: Option<ElvCardAccount>,
#[serde(skip_serializing_if = "Option::is_none")]
pub local_time: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payout_date: Option<crate::datetime::Date>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payout_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub process_as: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub products: Option<Vec<Product>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vat_rates: Option<Vec<TransactionFullVatRatesItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_events: Option<Vec<TransactionEvent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub simple_status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<Link>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub events: Option<Vec<Event>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location: Option<TransactionFullLocation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tax_enabled: Option<bool>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct TransactionHistory {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub currency: Option<Currency>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_type: Option<PaymentType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub installments_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub product_summary: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payouts_total: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payouts_received: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payout_plan: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_id: Option<TransactionId>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_transaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
#[serde(rename = "type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub card_type: Option<CardType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payout_date: Option<crate::datetime::Date>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payout_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub refunded_amount: Option<f64>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct TransactionsHistoryLink {
pub rel: String,
pub href: String,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct TransactionFullVatRatesItem {
#[serde(skip_serializing_if = "Option::is_none")]
pub rate: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub net: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vat: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gross: Option<f64>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct TransactionFullLocation {
#[serde(skip_serializing_if = "Option::is_none")]
pub lat: Option<Lat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub lon: Option<Lon>,
#[serde(skip_serializing_if = "Option::is_none")]
pub horizontal_accuracy: Option<HorizontalAccuracy>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListDeprecatedParamsOrder {
#[serde(rename = "ascending")]
Ascending,
#[serde(rename = "descending")]
Descending,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListDeprecatedParamsStatusesItem {
#[serde(rename = "SUCCESSFUL")]
Successful,
#[serde(rename = "CANCELLED")]
Cancelled,
#[serde(rename = "FAILED")]
Failed,
#[serde(rename = "REFUNDED")]
Refunded,
#[serde(rename = "CHARGE_BACK")]
ChargeBack,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListDeprecatedParamsTypesItem {
#[serde(rename = "PAYMENT")]
Payment,
#[serde(rename = "REFUND")]
Refund,
#[serde(rename = "CHARGE_BACK")]
ChargeBack,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListParamsOrder {
#[serde(rename = "ascending")]
Ascending,
#[serde(rename = "descending")]
Descending,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListParamsStatusesItem {
#[serde(rename = "SUCCESSFUL")]
Successful,
#[serde(rename = "CANCELLED")]
Cancelled,
#[serde(rename = "FAILED")]
Failed,
#[serde(rename = "REFUNDED")]
Refunded,
#[serde(rename = "CHARGE_BACK")]
ChargeBack,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListParamsTypesItem {
#[serde(rename = "PAYMENT")]
Payment,
#[serde(rename = "REFUND")]
Refund,
#[serde(rename = "CHARGE_BACK")]
ChargeBack,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct RefundBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub amount: Option<f32>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct GetDeprecatedParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_code: Option<String>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ListDeprecatedParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order: Option<ListDeprecatedParamsOrder>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub users: Option<Vec<String>>,
#[serde(rename = "statuses[]")]
#[serde(skip_serializing_if = "Option::is_none")]
pub statuses: Option<Vec<ListDeprecatedParamsStatusesItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_types: Option<Vec<PaymentType>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub types: Option<Vec<ListDeprecatedParamsTypesItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub changes_since: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub newest_time: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub newest_ref: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub oldest_time: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub oldest_ref: Option<String>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ListDeprecatedResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<TransactionHistory>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<TransactionsHistoryLink>>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct GetParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub internal_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub foreign_transaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_transaction_id: Option<String>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ListParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub transaction_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order: Option<ListParamsOrder>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub users: Option<Vec<String>>,
#[serde(rename = "statuses[]")]
#[serde(skip_serializing_if = "Option::is_none")]
pub statuses: Option<Vec<ListParamsStatusesItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub payment_types: Option<Vec<PaymentType>>,
#[serde(rename = "entry_modes[]")]
#[serde(skip_serializing_if = "Option::is_none")]
pub entry_modes: Option<Vec<EntryMode>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub types: Option<Vec<ListParamsTypesItem>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub changes_since: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub newest_time: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub newest_ref: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub oldest_time: Option<crate::datetime::DateTime>,
#[serde(skip_serializing_if = "Option::is_none")]
pub oldest_ref: Option<String>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ListResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<Vec<TransactionHistory>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<TransactionsHistoryLink>>,
}
use crate::client::Client;
#[derive(Debug)]
pub enum RefundErrorBody {
NotFound(Error),
Conflict(Error),
}
#[derive(Debug)]
pub enum GetDeprecatedErrorBody {
Unauthorized(Problem),
NotFound(Error),
}
#[derive(Debug)]
pub enum ListDeprecatedErrorBody {
BadRequest(Error),
Unauthorized(Problem),
}
#[derive(Debug)]
pub enum GetErrorBody {
Unauthorized(Problem),
NotFound(Error),
}
#[derive(Debug)]
pub enum ListErrorBody {
BadRequest(Error),
Unauthorized(Problem),
}
#[derive(Debug)]
pub struct TransactionsClient<'a> {
client: &'a Client,
}
impl<'a> TransactionsClient<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
self.client
}
pub async fn refund(
&self,
txn_id: impl Into<String>,
body: Option<RefundBody>,
) -> crate::error::SdkResult<(), RefundErrorBody> {
let path = format!("/v0.1/me/refund/{}", txn_id.into());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.post(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(body) = body {
request = request.json(&body);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::NO_CONTENT => Ok(()),
reqwest::StatusCode::NOT_FOUND => {
let body: Error = response.json().await?;
Err(crate::error::SdkError::api(RefundErrorBody::NotFound(body)))
}
reqwest::StatusCode::CONFLICT => {
let body: Error = response.json().await?;
Err(crate::error::SdkError::api(RefundErrorBody::Conflict(body)))
}
_ => {
let body_bytes = response.bytes().await?;
let body = crate::error::UnknownApiBody::from_bytes(body_bytes.as_ref());
Err(crate::error::SdkError::unexpected(status, body))
}
}
}
pub async fn get_deprecated(
&self,
params: GetDeprecatedParams,
) -> crate::error::SdkResult<TransactionFull, GetDeprecatedErrorBody> {
let path = "/v0.1/me/transactions";
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.id {
request = request.query(&[("id", value)]);
}
if let Some(ref value) = params.internal_id {
request = request.query(&[("internal_id", value)]);
}
if let Some(ref value) = params.transaction_code {
request = request.query(&[("transaction_code", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: TransactionFull = response.json().await?;
Ok(data)
}
reqwest::StatusCode::UNAUTHORIZED => {
let body: Problem = response.json().await?;
Err(crate::error::SdkError::api(
GetDeprecatedErrorBody::Unauthorized(body),
))
}
reqwest::StatusCode::NOT_FOUND => {
let body: Error = response.json().await?;
Err(crate::error::SdkError::api(
GetDeprecatedErrorBody::NotFound(body),
))
}
_ => {
let body_bytes = response.bytes().await?;
let body = crate::error::UnknownApiBody::from_bytes(body_bytes.as_ref());
Err(crate::error::SdkError::unexpected(status, body))
}
}
}
pub async fn list_deprecated(
&self,
params: ListDeprecatedParams,
) -> crate::error::SdkResult<ListDeprecatedResponse, ListDeprecatedErrorBody> {
let path = "/v0.1/me/transactions/history";
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.transaction_code {
request = request.query(&[("transaction_code", value)]);
}
if let Some(ref value) = params.order {
request = request.query(&[("order", value)]);
}
if let Some(ref value) = params.limit {
request = request.query(&[("limit", value)]);
}
if let Some(ref value) = params.users {
request = request.query(&[("users", value)]);
}
if let Some(ref value) = params.statuses {
request = request.query(&[("statuses[]", value)]);
}
if let Some(ref value) = params.payment_types {
request = request.query(&[("payment_types", value)]);
}
if let Some(ref value) = params.types {
request = request.query(&[("types", value)]);
}
if let Some(ref value) = params.changes_since {
request = request.query(&[("changes_since", value)]);
}
if let Some(ref value) = params.newest_time {
request = request.query(&[("newest_time", value)]);
}
if let Some(ref value) = params.newest_ref {
request = request.query(&[("newest_ref", value)]);
}
if let Some(ref value) = params.oldest_time {
request = request.query(&[("oldest_time", value)]);
}
if let Some(ref value) = params.oldest_ref {
request = request.query(&[("oldest_ref", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: ListDeprecatedResponse = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => {
let body: Error = response.json().await?;
Err(crate::error::SdkError::api(
ListDeprecatedErrorBody::BadRequest(body),
))
}
reqwest::StatusCode::UNAUTHORIZED => {
let body: Problem = response.json().await?;
Err(crate::error::SdkError::api(
ListDeprecatedErrorBody::Unauthorized(body),
))
}
_ => {
let body_bytes = response.bytes().await?;
let body = crate::error::UnknownApiBody::from_bytes(body_bytes.as_ref());
Err(crate::error::SdkError::unexpected(status, body))
}
}
}
pub async fn get(
&self,
merchant_code: impl Into<String>,
params: GetParams,
) -> crate::error::SdkResult<TransactionFull, GetErrorBody> {
let path = format!("/v2.1/merchants/{}/transactions", merchant_code.into());
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.id {
request = request.query(&[("id", value)]);
}
if let Some(ref value) = params.internal_id {
request = request.query(&[("internal_id", value)]);
}
if let Some(ref value) = params.transaction_code {
request = request.query(&[("transaction_code", value)]);
}
if let Some(ref value) = params.foreign_transaction_id {
request = request.query(&[("foreign_transaction_id", value)]);
}
if let Some(ref value) = params.client_transaction_id {
request = request.query(&[("client_transaction_id", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: TransactionFull = response.json().await?;
Ok(data)
}
reqwest::StatusCode::UNAUTHORIZED => {
let body: Problem = response.json().await?;
Err(crate::error::SdkError::api(GetErrorBody::Unauthorized(
body,
)))
}
reqwest::StatusCode::NOT_FOUND => {
let body: Error = response.json().await?;
Err(crate::error::SdkError::api(GetErrorBody::NotFound(body)))
}
_ => {
let body_bytes = response.bytes().await?;
let body = crate::error::UnknownApiBody::from_bytes(body_bytes.as_ref());
Err(crate::error::SdkError::unexpected(status, body))
}
}
}
pub async fn list(
&self,
merchant_code: impl Into<String>,
params: ListParams,
) -> crate::error::SdkResult<ListResponse, ListErrorBody> {
let path = format!(
"/v2.1/merchants/{}/transactions/history",
merchant_code.into()
);
let url = format!("{}{}", self.client.base_url(), path);
let mut request = self
.client
.http_client()
.get(&url)
.header("User-Agent", crate::version::user_agent())
.timeout(self.client.timeout());
if let Some(authorization) = self.client.authorization() {
request = request.header("Authorization", format!("Bearer {}", authorization));
}
for (header_name, header_value) in self.client.runtime_headers() {
request = request.header(*header_name, header_value);
}
if let Some(ref value) = params.transaction_code {
request = request.query(&[("transaction_code", value)]);
}
if let Some(ref value) = params.order {
request = request.query(&[("order", value)]);
}
if let Some(ref value) = params.limit {
request = request.query(&[("limit", value)]);
}
if let Some(ref value) = params.users {
request = request.query(&[("users", value)]);
}
if let Some(ref value) = params.statuses {
request = request.query(&[("statuses[]", value)]);
}
if let Some(ref value) = params.payment_types {
request = request.query(&[("payment_types", value)]);
}
if let Some(ref value) = params.entry_modes {
request = request.query(&[("entry_modes[]", value)]);
}
if let Some(ref value) = params.types {
request = request.query(&[("types", value)]);
}
if let Some(ref value) = params.changes_since {
request = request.query(&[("changes_since", value)]);
}
if let Some(ref value) = params.newest_time {
request = request.query(&[("newest_time", value)]);
}
if let Some(ref value) = params.newest_ref {
request = request.query(&[("newest_ref", value)]);
}
if let Some(ref value) = params.oldest_time {
request = request.query(&[("oldest_time", value)]);
}
if let Some(ref value) = params.oldest_ref {
request = request.query(&[("oldest_ref", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: ListResponse = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => {
let body: Error = response.json().await?;
Err(crate::error::SdkError::api(ListErrorBody::BadRequest(body)))
}
reqwest::StatusCode::UNAUTHORIZED => {
let body: Problem = response.json().await?;
Err(crate::error::SdkError::api(ListErrorBody::Unauthorized(
body,
)))
}
_ => {
let body_bytes = response.bytes().await?;
let body = crate::error::UnknownApiBody::from_bytes(body_bytes.as_ref());
Err(crate::error::SdkError::unexpected(status, body))
}
}
}
}