use super::common::*;
pub type FinancialPayouts = Vec<serde_json::Value>;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListDeprecatedParamsFormat {
#[serde(rename = "json")]
Json,
#[serde(rename = "csv")]
Csv,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListDeprecatedParamsOrder {
#[serde(rename = "desc")]
Desc,
#[serde(rename = "asc")]
Asc,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListParamsFormat {
#[serde(rename = "json")]
Json,
#[serde(rename = "csv")]
Csv,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum ListParamsOrder {
#[serde(rename = "desc")]
Desc,
#[serde(rename = "asc")]
Asc,
#[serde(untagged)]
Other(String),
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ListDeprecatedParams {
pub start_date: crate::datetime::Date,
pub end_date: crate::datetime::Date,
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<ListDeprecatedParamsFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order: Option<ListDeprecatedParamsOrder>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ListParams {
pub start_date: crate::datetime::Date,
pub end_date: crate::datetime::Date,
#[serde(skip_serializing_if = "Option::is_none")]
pub format: Option<ListParamsFormat>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order: Option<ListParamsOrder>,
}
use crate::client::Client;
#[derive(Debug)]
pub enum ListDeprecatedErrorBody {
BadRequest,
Unauthorized(Problem),
}
#[derive(Debug)]
pub enum ListErrorBody {
BadRequest,
Unauthorized(Problem),
}
#[derive(Debug)]
pub struct PayoutsClient<'a> {
client: &'a Client,
}
impl<'a> PayoutsClient<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
self.client
}
pub async fn list_deprecated(
&self,
params: ListDeprecatedParams,
) -> crate::error::SdkResult<FinancialPayouts, ListDeprecatedErrorBody> {
let path = "/v0.1/me/financials/payouts";
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);
}
request = request.query(&[("start_date", ¶ms.start_date)]);
request = request.query(&[("end_date", ¶ms.end_date)]);
if let Some(ref value) = params.format {
request = request.query(&[("format", value)]);
}
if let Some(ref value) = params.limit {
request = request.query(&[("limit", value)]);
}
if let Some(ref value) = params.order {
request = request.query(&[("order", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: FinancialPayouts = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => Err(crate::error::SdkError::api(
ListDeprecatedErrorBody::BadRequest,
)),
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 list(
&self,
merchant_code: impl Into<String>,
params: ListParams,
) -> crate::error::SdkResult<FinancialPayouts, ListErrorBody> {
let path = format!("/v1.0/merchants/{}/payouts", 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);
}
request = request.query(&[("start_date", ¶ms.start_date)]);
request = request.query(&[("end_date", ¶ms.end_date)]);
if let Some(ref value) = params.format {
request = request.query(&[("format", value)]);
}
if let Some(ref value) = params.limit {
request = request.query(&[("limit", value)]);
}
if let Some(ref value) = params.order {
request = request.query(&[("order", value)]);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: FinancialPayouts = response.json().await?;
Ok(data)
}
reqwest::StatusCode::BAD_REQUEST => {
Err(crate::error::SdkError::api(ListErrorBody::BadRequest))
}
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))
}
}
}
}