use super::common::*;
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Address {
#[serde(skip_serializing_if = "Option::is_none")]
pub autonomous_community: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub city: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub commune: Option<String>,
pub country: CountryCode,
#[serde(skip_serializing_if = "Option::is_none")]
pub county: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub department: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub district: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub eircode: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub municipality: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub neighborhood: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_town: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub province: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub state: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub street_address: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub zip_code: Option<String>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct BasePerson {
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub birthdate: Option<crate::datetime::Date>,
#[serde(skip_serializing_if = "Option::is_none")]
pub change_status: Option<ChangeStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub citizenship: Option<CountryCode>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
pub country_of_residence: Option<crate::Nullable<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub family_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub given_name: Option<String>,
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub identifiers: Option<PersonalIdentifiers>,
#[serde(skip_serializing_if = "Option::is_none")]
pub middle_name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
pub nationality: Option<crate::Nullable<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ownership: Option<Ownership>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<PhoneNumber>,
#[serde(skip_serializing_if = "Option::is_none")]
pub relationships: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<Version>,
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Branding {
#[serde(skip_serializing_if = "Option::is_none")]
pub background_color: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub footer_text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hero: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub logo: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub primary_color: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub primary_color_fg: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub secondary_color: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub secondary_color_fg: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct BusinessProfile {
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub branding: Option<Branding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dynamic_descriptor: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<PhoneNumber>,
#[serde(skip_serializing_if = "Option::is_none")]
pub website: Option<String>,
}
pub type ChangeStatus = String;
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct ClassicMerchantIdentifiers {
#[deprecated]
pub id: i64,
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Company {
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attributes: Option<Attributes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub identifiers: Option<CompanyIdentifiers>,
#[serde(skip_serializing_if = "Option::is_none")]
pub legal_type: Option<LegalType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub merchant_category_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<PhoneNumber>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trading_address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub website: Option<String>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct CompanyIdentifier {
#[serde(rename = "ref")]
pub r#ref: String,
pub value: String,
}
pub type CompanyIdentifiers = Vec<CompanyIdentifier>;
pub type CountryCode = String;
pub type LegalType = String;
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct ListPersonsResponseBody {
pub items: Vec<Person>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Merchant {
#[serde(skip_serializing_if = "Option::is_none")]
pub alias: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub business_profile: Option<BusinessProfile>,
#[serde(skip_serializing_if = "Option::is_none")]
pub business_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub change_status: Option<ChangeStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub classic: Option<ClassicMerchantIdentifiers>,
#[serde(skip_serializing_if = "Option::is_none")]
pub company: Option<Company>,
pub country: CountryCode,
pub created_at: crate::datetime::DateTime,
pub default_currency: String,
pub default_locale: String,
pub merchant_code: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<Meta>,
#[serde(skip_serializing_if = "Option::is_none")]
pub organization_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sandbox: Option<bool>,
pub updated_at: crate::datetime::DateTime,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<Version>,
}
#[derive(Debug, Clone, Default, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Meta {
#[serde(
flatten,
default,
skip_serializing_if = "std::collections::HashMap::is_empty"
)]
pub additional_properties: std::collections::HashMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Ownership {
pub share: i32,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Person {
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<Address>,
#[serde(skip_serializing_if = "Option::is_none")]
pub birthdate: Option<crate::datetime::Date>,
#[serde(skip_serializing_if = "Option::is_none")]
pub change_status: Option<ChangeStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub citizenship: Option<CountryCode>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
pub country_of_residence: Option<crate::Nullable<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub family_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub given_name: Option<String>,
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub identifiers: Option<PersonalIdentifiers>,
#[serde(skip_serializing_if = "Option::is_none")]
pub middle_name: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
deserialize_with = "crate::nullable::deserialize"
)]
pub nationality: Option<crate::Nullable<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ownership: Option<Ownership>,
#[serde(skip_serializing_if = "Option::is_none")]
pub phone_number: Option<PhoneNumber>,
#[serde(skip_serializing_if = "Option::is_none")]
pub relationships: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<Version>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct PersonalIdentifier {
#[serde(rename = "ref")]
pub r#ref: String,
pub value: String,
}
pub type PersonalIdentifiers = Vec<PersonalIdentifier>;
pub type PhoneNumber = String;
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct Timestamps {
pub created_at: crate::datetime::DateTime,
pub updated_at: crate::datetime::DateTime,
}
pub type Version = String;
use crate::client::Client;
#[derive(Debug, PartialEq)]
pub enum GetErrorBody {
NotFound(Problem),
}
#[derive(Debug, PartialEq)]
pub enum ListPersonsErrorBody {
NotFound(Problem),
}
#[derive(Debug, PartialEq)]
pub enum GetPersonErrorBody {
NotFound(Problem),
}
#[derive(Debug)]
pub struct MerchantsClient<'a> {
client: &'a Client,
}
impl<'a> MerchantsClient<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
self.client
}
pub async fn get(
&self,
merchant_code: impl Into<String>,
) -> crate::error::SdkResult<Merchant, GetErrorBody> {
let path = format!("/v1/merchants/{}", 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);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: Merchant = response.json().await?;
Ok(data)
}
reqwest::StatusCode::NOT_FOUND => {
let body: Problem = 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_persons(
&self,
merchant_code: impl Into<String>,
) -> crate::error::SdkResult<ListPersonsResponseBody, ListPersonsErrorBody> {
let path = format!("/v1/merchants/{}/persons", 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);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: ListPersonsResponseBody = response.json().await?;
Ok(data)
}
reqwest::StatusCode::NOT_FOUND => {
let body: Problem = response.json().await?;
Err(crate::error::SdkError::api(ListPersonsErrorBody::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 get_person(
&self,
merchant_code: impl Into<String>,
person_id: impl Into<String>,
) -> crate::error::SdkResult<Person, GetPersonErrorBody> {
let path = format!(
"/v1/merchants/{}/persons/{}",
merchant_code.into(),
person_id.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);
}
let response = request.send().await?;
let status = response.status();
match status {
reqwest::StatusCode::OK => {
let data: Person = response.json().await?;
Ok(data)
}
reqwest::StatusCode::NOT_FOUND => {
let body: Problem = response.json().await?;
Err(crate::error::SdkError::api(GetPersonErrorBody::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))
}
}
}
}