mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
refactor(payment_methods): add BankDebit payment method data to new domain type to be used in connector module (#4238)
Co-authored-by: Narayan Bhat <narayan.bhat@juspay.in>
This commit is contained in:
@ -373,210 +373,6 @@ pub enum FrmConnectors {
|
||||
Riskified,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Eq,
|
||||
Hash,
|
||||
PartialEq,
|
||||
serde::Deserialize,
|
||||
serde::Serialize,
|
||||
strum::Display,
|
||||
strum::EnumString,
|
||||
ToSchema,
|
||||
)]
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum BankType {
|
||||
Checking,
|
||||
Savings,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Eq,
|
||||
Hash,
|
||||
PartialEq,
|
||||
serde::Deserialize,
|
||||
serde::Serialize,
|
||||
strum::Display,
|
||||
strum::EnumString,
|
||||
ToSchema,
|
||||
)]
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum BankHolderType {
|
||||
Personal,
|
||||
Business,
|
||||
}
|
||||
|
||||
/// Name of banks supported by Hyperswitch
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Eq,
|
||||
Hash,
|
||||
PartialEq,
|
||||
serde::Deserialize,
|
||||
serde::Serialize,
|
||||
strum::Display,
|
||||
strum::EnumString,
|
||||
ToSchema,
|
||||
)]
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum BankNames {
|
||||
AmericanExpress,
|
||||
AffinBank,
|
||||
AgroBank,
|
||||
AllianceBank,
|
||||
AmBank,
|
||||
BankOfAmerica,
|
||||
BankIslam,
|
||||
BankMuamalat,
|
||||
BankRakyat,
|
||||
BankSimpananNasional,
|
||||
Barclays,
|
||||
BlikPSP,
|
||||
CapitalOne,
|
||||
Chase,
|
||||
Citi,
|
||||
CimbBank,
|
||||
Discover,
|
||||
NavyFederalCreditUnion,
|
||||
PentagonFederalCreditUnion,
|
||||
SynchronyBank,
|
||||
WellsFargo,
|
||||
AbnAmro,
|
||||
AsnBank,
|
||||
Bunq,
|
||||
Handelsbanken,
|
||||
HongLeongBank,
|
||||
HsbcBank,
|
||||
Ing,
|
||||
Knab,
|
||||
KuwaitFinanceHouse,
|
||||
Moneyou,
|
||||
Rabobank,
|
||||
Regiobank,
|
||||
Revolut,
|
||||
SnsBank,
|
||||
TriodosBank,
|
||||
VanLanschot,
|
||||
ArzteUndApothekerBank,
|
||||
AustrianAnadiBankAg,
|
||||
BankAustria,
|
||||
Bank99Ag,
|
||||
BankhausCarlSpangler,
|
||||
BankhausSchelhammerUndSchatteraAg,
|
||||
BankMillennium,
|
||||
BankPEKAOSA,
|
||||
BawagPskAg,
|
||||
BksBankAg,
|
||||
BrullKallmusBankAg,
|
||||
BtvVierLanderBank,
|
||||
CapitalBankGraweGruppeAg,
|
||||
CeskaSporitelna,
|
||||
Dolomitenbank,
|
||||
EasybankAg,
|
||||
EPlatbyVUB,
|
||||
ErsteBankUndSparkassen,
|
||||
FrieslandBank,
|
||||
HypoAlpeadriabankInternationalAg,
|
||||
HypoNoeLbFurNiederosterreichUWien,
|
||||
HypoOberosterreichSalzburgSteiermark,
|
||||
HypoTirolBankAg,
|
||||
HypoVorarlbergBankAg,
|
||||
HypoBankBurgenlandAktiengesellschaft,
|
||||
KomercniBanka,
|
||||
MBank,
|
||||
MarchfelderBank,
|
||||
Maybank,
|
||||
OberbankAg,
|
||||
OsterreichischeArzteUndApothekerbank,
|
||||
OcbcBank,
|
||||
PayWithING,
|
||||
PlaceZIPKO,
|
||||
PlatnoscOnlineKartaPlatnicza,
|
||||
PosojilnicaBankEGen,
|
||||
PostovaBanka,
|
||||
PublicBank,
|
||||
RaiffeisenBankengruppeOsterreich,
|
||||
RhbBank,
|
||||
SchelhammerCapitalBankAg,
|
||||
StandardCharteredBank,
|
||||
SchoellerbankAg,
|
||||
SpardaBankWien,
|
||||
SporoPay,
|
||||
SantanderPrzelew24,
|
||||
TatraPay,
|
||||
Viamo,
|
||||
VolksbankGruppe,
|
||||
VolkskreditbankAg,
|
||||
VrBankBraunau,
|
||||
UobBank,
|
||||
PayWithAliorBank,
|
||||
BankiSpoldzielcze,
|
||||
PayWithInteligo,
|
||||
BNPParibasPoland,
|
||||
BankNowySA,
|
||||
CreditAgricole,
|
||||
PayWithBOS,
|
||||
PayWithCitiHandlowy,
|
||||
PayWithPlusBank,
|
||||
ToyotaBank,
|
||||
VeloBank,
|
||||
ETransferPocztowy24,
|
||||
PlusBank,
|
||||
EtransferPocztowy24,
|
||||
BankiSpbdzielcze,
|
||||
BankNowyBfgSa,
|
||||
GetinBank,
|
||||
Blik,
|
||||
NoblePay,
|
||||
IdeaBank,
|
||||
EnveloBank,
|
||||
NestPrzelew,
|
||||
MbankMtransfer,
|
||||
Inteligo,
|
||||
PbacZIpko,
|
||||
BnpParibas,
|
||||
BankPekaoSa,
|
||||
VolkswagenBank,
|
||||
AliorBank,
|
||||
Boz,
|
||||
BangkokBank,
|
||||
KrungsriBank,
|
||||
KrungThaiBank,
|
||||
TheSiamCommercialBank,
|
||||
KasikornBank,
|
||||
OpenBankSuccess,
|
||||
OpenBankFailure,
|
||||
OpenBankCancelled,
|
||||
Aib,
|
||||
BankOfScotland,
|
||||
DanskeBank,
|
||||
FirstDirect,
|
||||
FirstTrust,
|
||||
Halifax,
|
||||
Lloyds,
|
||||
Monzo,
|
||||
NatWest,
|
||||
NationwideBank,
|
||||
RoyalBankOfScotland,
|
||||
Starling,
|
||||
TsbBank,
|
||||
TescoBank,
|
||||
UlsterBank,
|
||||
Yoursafe,
|
||||
N26,
|
||||
NationaleNederlanden,
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Clone, Debug, serde::Deserialize, serde::Serialize, strum::Display, strum::EnumString, ToSchema,
|
||||
)]
|
||||
|
||||
@ -1099,13 +1099,13 @@ pub enum BankDebitData {
|
||||
bank_account_holder_name: Option<Secret<String>>,
|
||||
|
||||
#[schema(value_type = String, example = "ACH")]
|
||||
bank_name: Option<enums::BankNames>,
|
||||
bank_name: Option<common_enums::BankNames>,
|
||||
|
||||
#[schema(value_type = String, example = "Checking")]
|
||||
bank_type: Option<enums::BankType>,
|
||||
bank_type: Option<common_enums::BankType>,
|
||||
|
||||
#[schema(value_type = String, example = "Personal")]
|
||||
bank_holder_type: Option<enums::BankHolderType>,
|
||||
bank_holder_type: Option<common_enums::BankHolderType>,
|
||||
},
|
||||
SepaBankDebit {
|
||||
/// Billing details for bank debit
|
||||
|
||||
@ -2653,3 +2653,41 @@ pub enum BankNames {
|
||||
N26,
|
||||
NationaleNederlanden,
|
||||
}
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Eq,
|
||||
Hash,
|
||||
PartialEq,
|
||||
serde::Deserialize,
|
||||
serde::Serialize,
|
||||
strum::Display,
|
||||
strum::EnumString,
|
||||
ToSchema,
|
||||
)]
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum BankType {
|
||||
Checking,
|
||||
Savings,
|
||||
}
|
||||
#[derive(
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Eq,
|
||||
Hash,
|
||||
PartialEq,
|
||||
serde::Deserialize,
|
||||
serde::Serialize,
|
||||
strum::Display,
|
||||
strum::EnumString,
|
||||
ToSchema,
|
||||
)]
|
||||
#[strum(serialize_all = "snake_case")]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum BankHolderType {
|
||||
Personal,
|
||||
Business,
|
||||
}
|
||||
|
||||
@ -1822,13 +1822,11 @@ fn build_shopper_reference(customer_id: &Option<String>, merchant_id: String) ->
|
||||
.map(|c_id| format!("{}_{}", merchant_id, c_id))
|
||||
}
|
||||
|
||||
impl<'a> TryFrom<&api_models::payments::BankDebitData> for AdyenPaymentMethod<'a> {
|
||||
impl<'a> TryFrom<&domain::BankDebitData> for AdyenPaymentMethod<'a> {
|
||||
type Error = Error;
|
||||
fn try_from(
|
||||
bank_debit_data: &api_models::payments::BankDebitData,
|
||||
) -> Result<Self, Self::Error> {
|
||||
fn try_from(bank_debit_data: &domain::BankDebitData) -> Result<Self, Self::Error> {
|
||||
match bank_debit_data {
|
||||
payments::BankDebitData::AchBankDebit {
|
||||
domain::BankDebitData::AchBankDebit {
|
||||
account_number,
|
||||
routing_number,
|
||||
card_holder_name,
|
||||
@ -1845,7 +1843,7 @@ impl<'a> TryFrom<&api_models::payments::BankDebitData> for AdyenPaymentMethod<'a
|
||||
)?,
|
||||
},
|
||||
))),
|
||||
payments::BankDebitData::SepaBankDebit {
|
||||
domain::BankDebitData::SepaBankDebit {
|
||||
iban,
|
||||
bank_account_holder_name,
|
||||
..
|
||||
@ -1859,7 +1857,7 @@ impl<'a> TryFrom<&api_models::payments::BankDebitData> for AdyenPaymentMethod<'a
|
||||
iban_number: iban.clone(),
|
||||
},
|
||||
))),
|
||||
payments::BankDebitData::BacsBankDebit {
|
||||
domain::BankDebitData::BacsBankDebit {
|
||||
account_number,
|
||||
sort_code,
|
||||
bank_account_holder_name,
|
||||
@ -1876,7 +1874,7 @@ impl<'a> TryFrom<&api_models::payments::BankDebitData> for AdyenPaymentMethod<'a
|
||||
)?,
|
||||
},
|
||||
))),
|
||||
payments::BankDebitData::BecsBankDebit { .. } => {
|
||||
domain::BankDebitData::BecsBankDebit { .. } => {
|
||||
Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Adyen"),
|
||||
)
|
||||
@ -2685,7 +2683,7 @@ impl<'a>
|
||||
impl<'a>
|
||||
TryFrom<(
|
||||
&AdyenRouterData<&types::PaymentsAuthorizeRouterData>,
|
||||
&api_models::payments::BankDebitData,
|
||||
&domain::BankDebitData,
|
||||
)> for AdyenPaymentRequest<'a>
|
||||
{
|
||||
type Error = Error;
|
||||
@ -2693,7 +2691,7 @@ impl<'a>
|
||||
fn try_from(
|
||||
value: (
|
||||
&AdyenRouterData<&types::PaymentsAuthorizeRouterData>,
|
||||
&api_models::payments::BankDebitData,
|
||||
&domain::BankDebitData,
|
||||
),
|
||||
) -> Result<Self, Self::Error> {
|
||||
let (item, bank_debit_data) = value;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
use api_models::{
|
||||
enums::{BankType, CountryAlpha2, UsStatesAbbreviation},
|
||||
payments::{AddressDetails, BankDebitData},
|
||||
enums::{CountryAlpha2, UsStatesAbbreviation},
|
||||
payments::AddressDetails,
|
||||
};
|
||||
use common_utils::pii::{self, IpAddress};
|
||||
use masking::{ExposeInterface, Secret};
|
||||
@ -82,16 +82,16 @@ impl TryFrom<&types::ConnectorCustomerRouterData> for GocardlessCustomerRequest
|
||||
let billing_details = match &item.request.payment_method_data {
|
||||
domain::PaymentMethodData::BankDebit(bank_debit_data) => {
|
||||
match bank_debit_data.clone() {
|
||||
BankDebitData::AchBankDebit {
|
||||
domain::BankDebitData::AchBankDebit {
|
||||
billing_details, ..
|
||||
} => Ok(billing_details),
|
||||
BankDebitData::SepaBankDebit {
|
||||
domain::BankDebitData::SepaBankDebit {
|
||||
billing_details, ..
|
||||
} => Ok(billing_details),
|
||||
BankDebitData::BecsBankDebit {
|
||||
domain::BankDebitData::BecsBankDebit {
|
||||
billing_details, ..
|
||||
} => Ok(billing_details),
|
||||
BankDebitData::BacsBankDebit { .. } => {
|
||||
domain::BankDebitData::BacsBankDebit { .. } => {
|
||||
Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Gocardless"),
|
||||
))
|
||||
@ -310,11 +310,11 @@ impl TryFrom<&types::TokenizationRouterData> for CustomerBankAccount {
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&BankDebitData> for CustomerBankAccount {
|
||||
impl TryFrom<&domain::BankDebitData> for CustomerBankAccount {
|
||||
type Error = error_stack::Report<errors::ConnectorError>;
|
||||
fn try_from(item: &BankDebitData) -> Result<Self, Self::Error> {
|
||||
fn try_from(item: &domain::BankDebitData) -> Result<Self, Self::Error> {
|
||||
match item {
|
||||
BankDebitData::AchBankDebit {
|
||||
domain::BankDebitData::AchBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
routing_number,
|
||||
@ -339,7 +339,7 @@ impl TryFrom<&BankDebitData> for CustomerBankAccount {
|
||||
};
|
||||
Ok(Self::USBankAccount(us_bank_account))
|
||||
}
|
||||
BankDebitData::BecsBankDebit {
|
||||
domain::BankDebitData::BecsBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
bsb_number,
|
||||
@ -360,7 +360,7 @@ impl TryFrom<&BankDebitData> for CustomerBankAccount {
|
||||
};
|
||||
Ok(Self::AUBankAccount(au_bank_account))
|
||||
}
|
||||
BankDebitData::SepaBankDebit {
|
||||
domain::BankDebitData::SepaBankDebit {
|
||||
iban,
|
||||
bank_account_holder_name,
|
||||
..
|
||||
@ -377,19 +377,21 @@ impl TryFrom<&BankDebitData> for CustomerBankAccount {
|
||||
};
|
||||
Ok(Self::InternationalBankAccount(international_bank_account))
|
||||
}
|
||||
BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Gocardless"),
|
||||
)
|
||||
.into()),
|
||||
domain::BankDebitData::BacsBankDebit { .. } => {
|
||||
Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Gocardless"),
|
||||
)
|
||||
.into())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<BankType> for AccountType {
|
||||
fn from(item: BankType) -> Self {
|
||||
impl From<common_enums::BankType> for AccountType {
|
||||
fn from(item: common_enums::BankType) -> Self {
|
||||
match item {
|
||||
BankType::Checking => Self::Checking,
|
||||
BankType::Savings => Self::Savings,
|
||||
common_enums::BankType::Checking => Self::Checking,
|
||||
common_enums::BankType::Savings => Self::Savings,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -518,29 +520,31 @@ impl TryFrom<&types::SetupMandateRouterData> for GocardlessMandateRequest {
|
||||
}
|
||||
|
||||
fn get_ip_if_required(
|
||||
bank_debit_data: &BankDebitData,
|
||||
bank_debit_data: &domain::BankDebitData,
|
||||
item: &types::SetupMandateRouterData,
|
||||
) -> Result<Option<Secret<String, IpAddress>>, error_stack::Report<errors::ConnectorError>> {
|
||||
let ip_address = item.request.get_browser_info()?.get_ip_address()?;
|
||||
match bank_debit_data {
|
||||
BankDebitData::AchBankDebit { .. } => Ok(Some(ip_address)),
|
||||
BankDebitData::SepaBankDebit { .. }
|
||||
| BankDebitData::BecsBankDebit { .. }
|
||||
| BankDebitData::BacsBankDebit { .. } => Ok(None),
|
||||
domain::BankDebitData::AchBankDebit { .. } => Ok(Some(ip_address)),
|
||||
domain::BankDebitData::SepaBankDebit { .. }
|
||||
| domain::BankDebitData::BecsBankDebit { .. }
|
||||
| domain::BankDebitData::BacsBankDebit { .. } => Ok(None),
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&BankDebitData> for GocardlessScheme {
|
||||
impl TryFrom<&domain::BankDebitData> for GocardlessScheme {
|
||||
type Error = error_stack::Report<errors::ConnectorError>;
|
||||
fn try_from(item: &BankDebitData) -> Result<Self, Self::Error> {
|
||||
fn try_from(item: &domain::BankDebitData) -> Result<Self, Self::Error> {
|
||||
match item {
|
||||
BankDebitData::AchBankDebit { .. } => Ok(Self::Ach),
|
||||
BankDebitData::SepaBankDebit { .. } => Ok(Self::SepaCore),
|
||||
BankDebitData::BecsBankDebit { .. } => Ok(Self::Becs),
|
||||
BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented(
|
||||
"Setup Mandate flow for selected payment method through Gocardless".to_string(),
|
||||
)
|
||||
.into()),
|
||||
domain::BankDebitData::AchBankDebit { .. } => Ok(Self::Ach),
|
||||
domain::BankDebitData::SepaBankDebit { .. } => Ok(Self::SepaCore),
|
||||
domain::BankDebitData::BecsBankDebit { .. } => Ok(Self::Becs),
|
||||
domain::BankDebitData::BacsBankDebit { .. } => {
|
||||
Err(errors::ConnectorError::NotImplemented(
|
||||
"Setup Mandate flow for selected payment method through Gocardless".to_string(),
|
||||
)
|
||||
.into())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -254,11 +254,11 @@ impl TryFrom<&domain::BankRedirectData> for PaymentMethodData {
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&api_models::payments::BankDebitData> for PaymentMethodData {
|
||||
impl TryFrom<&domain::BankDebitData> for PaymentMethodData {
|
||||
type Error = Error;
|
||||
fn try_from(value: &api_models::payments::BankDebitData) -> Result<Self, Self::Error> {
|
||||
fn try_from(value: &domain::BankDebitData) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
api_models::payments::BankDebitData::SepaBankDebit {
|
||||
domain::BankDebitData::SepaBankDebit {
|
||||
bank_account_holder_name,
|
||||
iban,
|
||||
..
|
||||
|
||||
@ -657,14 +657,14 @@ impl TryFrom<&domain::PayLaterData> for PaypalPaymentsRequest {
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&api_models::payments::BankDebitData> for PaypalPaymentsRequest {
|
||||
impl TryFrom<&domain::BankDebitData> for PaypalPaymentsRequest {
|
||||
type Error = error_stack::Report<errors::ConnectorError>;
|
||||
fn try_from(value: &api_models::payments::BankDebitData) -> Result<Self, Self::Error> {
|
||||
fn try_from(value: &domain::BankDebitData) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
api_models::payments::BankDebitData::AchBankDebit { .. }
|
||||
| api_models::payments::BankDebitData::SepaBankDebit { .. }
|
||||
| api_models::payments::BankDebitData::BecsBankDebit { .. }
|
||||
| api_models::payments::BankDebitData::BacsBankDebit { .. } => {
|
||||
domain::BankDebitData::AchBankDebit { .. }
|
||||
| domain::BankDebitData::SepaBankDebit { .. }
|
||||
| domain::BankDebitData::BecsBankDebit { .. }
|
||||
| domain::BankDebitData::BacsBankDebit { .. } => {
|
||||
Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Paypal"),
|
||||
)
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
use api_models::payments::BankDebitData;
|
||||
use error_stack::ResultExt;
|
||||
use masking::{ExposeInterface, PeekInterface, Secret};
|
||||
use serde::{Deserialize, Serialize};
|
||||
@ -13,19 +12,21 @@ use crate::{
|
||||
unimplemented_payment_method,
|
||||
};
|
||||
|
||||
impl TryFrom<(&types::TokenizationRouterData, BankDebitData)> for SquareTokenRequest {
|
||||
impl TryFrom<(&types::TokenizationRouterData, domain::BankDebitData)> for SquareTokenRequest {
|
||||
type Error = error_stack::Report<errors::ConnectorError>;
|
||||
fn try_from(
|
||||
value: (&types::TokenizationRouterData, BankDebitData),
|
||||
value: (&types::TokenizationRouterData, domain::BankDebitData),
|
||||
) -> Result<Self, Self::Error> {
|
||||
let (_item, bank_debit_data) = value;
|
||||
match bank_debit_data {
|
||||
BankDebitData::AchBankDebit { .. }
|
||||
| BankDebitData::SepaBankDebit { .. }
|
||||
| BankDebitData::BecsBankDebit { .. }
|
||||
| BankDebitData::BacsBankDebit { .. } => Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Square"),
|
||||
))?,
|
||||
domain::BankDebitData::AchBankDebit { .. }
|
||||
| domain::BankDebitData::SepaBankDebit { .. }
|
||||
| domain::BankDebitData::BecsBankDebit { .. }
|
||||
| domain::BankDebitData::BacsBankDebit { .. } => {
|
||||
Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Square"),
|
||||
))?
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,9 +88,9 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme
|
||||
idempotency_id: Some(item.router_data.connector_request_reference_id.clone()),
|
||||
})
|
||||
}
|
||||
domain::PaymentMethodData::BankDebit(
|
||||
api_models::payments::BankDebitData::AchBankDebit { .. },
|
||||
) => {
|
||||
domain::PaymentMethodData::BankDebit(domain::BankDebitData::AchBankDebit {
|
||||
..
|
||||
}) => {
|
||||
let pm_token = item.router_data.get_payment_method_token()?;
|
||||
let pre_auth = !item.router_data.request.is_auto_capture()?;
|
||||
Ok(Self {
|
||||
@ -206,9 +206,9 @@ pub struct StaxBankTokenizeData {
|
||||
person_name: Secret<String>,
|
||||
bank_account: Secret<String>,
|
||||
bank_routing: Secret<String>,
|
||||
bank_name: api_models::enums::BankNames,
|
||||
bank_type: api_models::enums::BankType,
|
||||
bank_holder_type: api_models::enums::BankHolderType,
|
||||
bank_name: common_enums::BankNames,
|
||||
bank_type: common_enums::BankType,
|
||||
bank_holder_type: common_enums::BankHolderType,
|
||||
customer_id: Secret<String>,
|
||||
}
|
||||
|
||||
@ -238,17 +238,15 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest {
|
||||
};
|
||||
Ok(Self::Card(stax_card_data))
|
||||
}
|
||||
domain::PaymentMethodData::BankDebit(
|
||||
api_models::payments::BankDebitData::AchBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
routing_number,
|
||||
bank_name,
|
||||
bank_type,
|
||||
bank_holder_type,
|
||||
..
|
||||
},
|
||||
) => {
|
||||
domain::PaymentMethodData::BankDebit(domain::BankDebitData::AchBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
routing_number,
|
||||
bank_name,
|
||||
bank_type,
|
||||
bank_holder_type,
|
||||
..
|
||||
}) => {
|
||||
let stax_bank_data = StaxBankTokenizeData {
|
||||
person_name: billing_details.name,
|
||||
bank_account: account_number,
|
||||
|
||||
@ -1029,13 +1029,13 @@ impl ForeignTryFrom<&domain::WalletData> for Option<StripePaymentMethodType> {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&payments::BankDebitData> for StripePaymentMethodType {
|
||||
fn from(bank_debit_data: &payments::BankDebitData) -> Self {
|
||||
impl From<&domain::BankDebitData> for StripePaymentMethodType {
|
||||
fn from(bank_debit_data: &domain::BankDebitData) -> Self {
|
||||
match bank_debit_data {
|
||||
payments::BankDebitData::AchBankDebit { .. } => Self::Ach,
|
||||
payments::BankDebitData::SepaBankDebit { .. } => Self::Sepa,
|
||||
payments::BankDebitData::BecsBankDebit { .. } => Self::Becs,
|
||||
payments::BankDebitData::BacsBankDebit { .. } => Self::Bacs,
|
||||
domain::BankDebitData::AchBankDebit { .. } => Self::Ach,
|
||||
domain::BankDebitData::SepaBankDebit { .. } => Self::Sepa,
|
||||
domain::BankDebitData::BecsBankDebit { .. } => Self::Becs,
|
||||
domain::BankDebitData::BacsBankDebit { .. } => Self::Bacs,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1078,8 +1078,8 @@ impl TryFrom<(&domain::payments::PayLaterData, StripePaymentMethodType)> for Str
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&payments::BankDebitBilling> for StripeBillingAddress {
|
||||
fn from(item: &payments::BankDebitBilling) -> Self {
|
||||
impl From<&domain::BankDebitBilling> for StripeBillingAddress {
|
||||
fn from(item: &domain::BankDebitBilling) -> Self {
|
||||
Self {
|
||||
email: Some(item.email.to_owned()),
|
||||
country: item
|
||||
@ -1212,10 +1212,10 @@ impl TryFrom<(&domain::BankRedirectData, Option<bool>)> for StripeBillingAddress
|
||||
}
|
||||
|
||||
fn get_bank_debit_data(
|
||||
bank_debit_data: &payments::BankDebitData,
|
||||
bank_debit_data: &domain::BankDebitData,
|
||||
) -> (StripePaymentMethodType, BankDebitData, StripeBillingAddress) {
|
||||
match bank_debit_data {
|
||||
payments::BankDebitData::AchBankDebit {
|
||||
domain::BankDebitData::AchBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
routing_number,
|
||||
@ -1230,7 +1230,7 @@ fn get_bank_debit_data(
|
||||
let billing_data = StripeBillingAddress::from(billing_details);
|
||||
(StripePaymentMethodType::Ach, ach_data, billing_data)
|
||||
}
|
||||
payments::BankDebitData::SepaBankDebit {
|
||||
domain::BankDebitData::SepaBankDebit {
|
||||
billing_details,
|
||||
iban,
|
||||
..
|
||||
@ -1242,7 +1242,7 @@ fn get_bank_debit_data(
|
||||
let billing_data = StripeBillingAddress::from(billing_details);
|
||||
(StripePaymentMethodType::Sepa, sepa_data, billing_data)
|
||||
}
|
||||
payments::BankDebitData::BecsBankDebit {
|
||||
domain::BankDebitData::BecsBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
bsb_number,
|
||||
@ -1256,7 +1256,7 @@ fn get_bank_debit_data(
|
||||
let billing_data = StripeBillingAddress::from(billing_details);
|
||||
(StripePaymentMethodType::Becs, becs_data, billing_data)
|
||||
}
|
||||
payments::BankDebitData::BacsBankDebit {
|
||||
domain::BankDebitData::BacsBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
sort_code,
|
||||
|
||||
@ -2,7 +2,7 @@ use std::collections::HashMap;
|
||||
|
||||
use api_models::{
|
||||
enums::{CanadaStatesAbbreviation, UsStatesAbbreviation},
|
||||
payments::{self, BankDebitBilling, OrderDetailsWithAmount},
|
||||
payments::{self, OrderDetailsWithAmount},
|
||||
};
|
||||
use base64::Engine;
|
||||
use common_utils::{
|
||||
@ -1255,7 +1255,7 @@ pub trait BankDirectDebitBillingData {
|
||||
fn get_billing_country(&self) -> Result<api_models::enums::CountryAlpha2, Error>;
|
||||
}
|
||||
|
||||
impl BankDirectDebitBillingData for BankDebitBilling {
|
||||
impl BankDirectDebitBillingData for domain::BankDebitBilling {
|
||||
fn get_billing_country(&self) -> Result<api_models::enums::CountryAlpha2, Error> {
|
||||
self.address
|
||||
.as_ref()
|
||||
|
||||
@ -768,14 +768,14 @@ impl TryFrom<&domain::payments::PayLaterData> for ZenPaymentsRequest {
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&api_models::payments::BankDebitData> for ZenPaymentsRequest {
|
||||
impl TryFrom<&domain::BankDebitData> for ZenPaymentsRequest {
|
||||
type Error = error_stack::Report<errors::ConnectorError>;
|
||||
fn try_from(value: &api_models::payments::BankDebitData) -> Result<Self, Self::Error> {
|
||||
fn try_from(value: &domain::BankDebitData) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
api_models::payments::BankDebitData::AchBankDebit { .. }
|
||||
| api_models::payments::BankDebitData::SepaBankDebit { .. }
|
||||
| api_models::payments::BankDebitData::BecsBankDebit { .. }
|
||||
| api_models::payments::BankDebitData::BacsBankDebit { .. } => {
|
||||
domain::BankDebitData::AchBankDebit { .. }
|
||||
| domain::BankDebitData::SepaBankDebit { .. }
|
||||
| domain::BankDebitData::BecsBankDebit { .. }
|
||||
| domain::BankDebitData::BacsBankDebit { .. } => {
|
||||
Err(errors::ConnectorError::NotImplemented(
|
||||
utils::get_unimplemented_payment_method_error_message("Zen"),
|
||||
)
|
||||
|
||||
@ -702,7 +702,7 @@ pub async fn retrieve_payment_method_from_auth_service(
|
||||
|
||||
let mut bank_type = None;
|
||||
if let Some(account_type) = bank_account.account_type.clone() {
|
||||
bank_type = api_models::enums::BankType::from_str(account_type.as_str())
|
||||
bank_type = common_enums::BankType::from_str(account_type.as_str())
|
||||
.map_err(|error| logger::error!(%error,"unable to parse account_type {account_type:?}"))
|
||||
.ok();
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
use common_utils::pii::{self, Email};
|
||||
use masking::Secret;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use utoipa::ToSchema;
|
||||
|
||||
// We need to derive Serialize and Deserialize because some parts of payment method data are being
|
||||
// stored in the database as serde_json::Value
|
||||
@ -12,7 +11,7 @@ pub enum PaymentMethodData {
|
||||
Wallet(WalletData),
|
||||
PayLater(PayLaterData),
|
||||
BankRedirect(BankRedirectData),
|
||||
BankDebit(api_models::payments::BankDebitData),
|
||||
BankDebit(BankDebitData),
|
||||
BankTransfer(Box<api_models::payments::BankTransferData>),
|
||||
Crypto(CryptoData),
|
||||
MandatePayment,
|
||||
@ -65,7 +64,7 @@ pub enum CardRedirectData {
|
||||
CardRedirect {},
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub enum PayLaterData {
|
||||
KlarnaRedirect {
|
||||
billing_email: Email,
|
||||
@ -85,7 +84,7 @@ pub enum PayLaterData {
|
||||
AtomeRedirect {},
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
|
||||
pub enum WalletData {
|
||||
AliPayQr(Box<AliPayQr>),
|
||||
@ -116,14 +115,14 @@ pub enum WalletData {
|
||||
SwishQr(SwishQrData),
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
|
||||
pub struct SamsungPayWalletData {
|
||||
/// The encrypted payment token from Samsung
|
||||
pub token: Secret<String>,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
|
||||
pub struct GooglePayWalletData {
|
||||
/// The type of payment method
|
||||
@ -136,67 +135,67 @@ pub struct GooglePayWalletData {
|
||||
pub tokenization_data: GpayTokenizationData,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct ApplePayRedirectData {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct GooglePayRedirectData {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct GooglePayThirdPartySdkData {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct ApplePayThirdPartySdkData {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct WeChatPayRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct WeChatPay {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct WeChatPayQr {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct CashappQr {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct PaypalRedirection {
|
||||
/// paypal's email address
|
||||
pub email: Option<Email>,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct AliPayQr {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct AliPayRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct AliPayHkRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct MomoRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct KakaoPayRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct GoPayRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct GcashRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct MobilePayRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct MbWayRedirection {
|
||||
/// Telephone number of the shopper. Should be Portuguese phone number.
|
||||
pub telephone_number: Secret<String>,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
|
||||
pub struct GooglePayPaymentMethodInfo {
|
||||
/// The name of the card network
|
||||
@ -205,19 +204,19 @@ pub struct GooglePayPaymentMethodInfo {
|
||||
pub card_details: String,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct PayPalWalletData {
|
||||
/// Token generated for the Apple pay
|
||||
pub token: String,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct TouchNGoRedirection {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct SwishQrData {}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct GpayTokenizationData {
|
||||
/// The type of the token
|
||||
pub token_type: String,
|
||||
@ -225,7 +224,7 @@ pub struct GpayTokenizationData {
|
||||
pub token: String,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct ApplePayWalletData {
|
||||
/// The payment data of Apple pay
|
||||
pub payment_data: String,
|
||||
@ -235,14 +234,14 @@ pub struct ApplePayWalletData {
|
||||
pub transaction_identifier: String,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
pub struct ApplepayPaymentMethod {
|
||||
pub display_name: String,
|
||||
pub network: String,
|
||||
pub pm_type: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
|
||||
pub enum BankRedirectData {
|
||||
BancontactCard {
|
||||
@ -312,26 +311,25 @@ pub enum BankRedirectData {
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
pub struct BankRedirectBilling {
|
||||
pub billing_name: Option<Secret<String>>,
|
||||
pub email: Option<Email>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct CryptoData {
|
||||
pub pay_currency: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct UpiData {
|
||||
#[schema(value_type = Option<String>, example = "successtest@iata")]
|
||||
pub vpa_id: Option<Secret<String, pii::UpiVpaMaskingStrategy>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum VoucherData {
|
||||
Boleto(Box<BoletoVoucherData>),
|
||||
@ -350,85 +348,109 @@ pub enum VoucherData {
|
||||
PayEasy(Box<JCSVoucherData>),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct BoletoVoucherData {
|
||||
/// The shopper's social security number
|
||||
#[schema(value_type = Option<String>)]
|
||||
pub social_security_number: Option<Secret<String>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct AlfamartVoucherData {
|
||||
/// The billing first name for Alfamart
|
||||
#[schema(value_type = String, example = "Jane")]
|
||||
pub first_name: Secret<String>,
|
||||
/// The billing second name for Alfamart
|
||||
#[schema(value_type = String, example = "Doe")]
|
||||
pub last_name: Option<Secret<String>>,
|
||||
/// The Email ID for Alfamart
|
||||
#[schema(value_type = String, example = "example@me.com")]
|
||||
pub email: Email,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct IndomaretVoucherData {
|
||||
/// The billing first name for Alfamart
|
||||
#[schema(value_type = String, example = "Jane")]
|
||||
pub first_name: Secret<String>,
|
||||
/// The billing second name for Alfamart
|
||||
#[schema(value_type = String, example = "Doe")]
|
||||
pub last_name: Option<Secret<String>>,
|
||||
/// The Email ID for Alfamart
|
||||
#[schema(value_type = String, example = "example@me.com")]
|
||||
pub email: Email,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct JCSVoucherData {
|
||||
/// The billing first name for Japanese convenience stores
|
||||
#[schema(value_type = String, example = "Jane")]
|
||||
pub first_name: Secret<String>,
|
||||
/// The billing second name Japanese convenience stores
|
||||
#[schema(value_type = String, example = "Doe")]
|
||||
pub last_name: Option<Secret<String>>,
|
||||
/// The Email ID for Japanese convenience stores
|
||||
#[schema(value_type = String, example = "example@me.com")]
|
||||
pub email: Email,
|
||||
/// The telephone number for Japanese convenience stores
|
||||
#[schema(value_type = String, example = "9999999999")]
|
||||
pub phone_number: String,
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, ToSchema, Eq, PartialEq)]
|
||||
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, Eq, PartialEq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum GiftCardData {
|
||||
Givex(GiftCardDetails),
|
||||
PaySafeCard {},
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, ToSchema, Eq, PartialEq)]
|
||||
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, Eq, PartialEq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct GiftCardDetails {
|
||||
/// The gift card number
|
||||
#[schema(value_type = String)]
|
||||
pub number: Secret<String>,
|
||||
/// The card verification code.
|
||||
#[schema(value_type = String)]
|
||||
pub cvc: Secret<String>,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Debug, serde::Deserialize, serde::Serialize, Clone, ToSchema, Default)]
|
||||
#[derive(Eq, PartialEq, Debug, serde::Deserialize, serde::Serialize, Clone, Default)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct CardToken {
|
||||
/// The card holder's name
|
||||
#[schema(value_type = String, example = "John Test")]
|
||||
pub card_holder_name: Option<Secret<String>>,
|
||||
|
||||
/// The CVC number for the card
|
||||
#[schema(value_type = Option<String>)]
|
||||
pub card_cvc: Option<Secret<String>>,
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, Eq, PartialEq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum BankDebitData {
|
||||
AchBankDebit {
|
||||
billing_details: BankDebitBilling,
|
||||
account_number: Secret<String>,
|
||||
routing_number: Secret<String>,
|
||||
card_holder_name: Option<Secret<String>>,
|
||||
bank_account_holder_name: Option<Secret<String>>,
|
||||
bank_name: Option<common_enums::BankNames>,
|
||||
bank_type: Option<common_enums::BankType>,
|
||||
bank_holder_type: Option<common_enums::BankHolderType>,
|
||||
},
|
||||
SepaBankDebit {
|
||||
billing_details: BankDebitBilling,
|
||||
iban: Secret<String>,
|
||||
bank_account_holder_name: Option<Secret<String>>,
|
||||
},
|
||||
BecsBankDebit {
|
||||
billing_details: BankDebitBilling,
|
||||
account_number: Secret<String>,
|
||||
bsb_number: Secret<String>,
|
||||
bank_account_holder_name: Option<Secret<String>>,
|
||||
},
|
||||
BacsBankDebit {
|
||||
billing_details: BankDebitBilling,
|
||||
account_number: Secret<String>,
|
||||
sort_code: Secret<String>,
|
||||
bank_account_holder_name: Option<Secret<String>>,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, Eq, PartialEq)]
|
||||
pub struct BankDebitBilling {
|
||||
pub name: Secret<String>,
|
||||
pub email: Email,
|
||||
pub address: Option<api_models::payments::AddressDetails>,
|
||||
}
|
||||
|
||||
impl From<api_models::payments::PaymentMethodData> for PaymentMethodData {
|
||||
fn from(api_model_payment_method_data: api_models::payments::PaymentMethodData) -> Self {
|
||||
match api_model_payment_method_data {
|
||||
@ -448,7 +470,7 @@ impl From<api_models::payments::PaymentMethodData> for PaymentMethodData {
|
||||
Self::BankRedirect(From::from(bank_redirect_data))
|
||||
}
|
||||
api_models::payments::PaymentMethodData::BankDebit(bank_debit_data) => {
|
||||
Self::BankDebit(bank_debit_data)
|
||||
Self::BankDebit(From::from(bank_debit_data))
|
||||
}
|
||||
api_models::payments::PaymentMethodData::BankTransfer(bank_transfer_data) => {
|
||||
Self::BankTransfer(bank_transfer_data)
|
||||
@ -845,3 +867,76 @@ impl From<api_models::payments::CardToken> for CardToken {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<api_models::payments::BankDebitData> for BankDebitData {
|
||||
fn from(value: api_models::payments::BankDebitData) -> Self {
|
||||
match value {
|
||||
api_models::payments::BankDebitData::AchBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
routing_number,
|
||||
card_holder_name,
|
||||
bank_account_holder_name,
|
||||
bank_name,
|
||||
bank_type,
|
||||
bank_holder_type,
|
||||
} => Self::AchBankDebit {
|
||||
billing_details: BankDebitBilling {
|
||||
name: billing_details.name,
|
||||
email: billing_details.email,
|
||||
address: billing_details.address,
|
||||
},
|
||||
account_number,
|
||||
routing_number,
|
||||
card_holder_name,
|
||||
bank_account_holder_name,
|
||||
bank_name,
|
||||
bank_type,
|
||||
bank_holder_type,
|
||||
},
|
||||
api_models::payments::BankDebitData::SepaBankDebit {
|
||||
billing_details,
|
||||
iban,
|
||||
bank_account_holder_name,
|
||||
} => Self::SepaBankDebit {
|
||||
billing_details: BankDebitBilling {
|
||||
name: billing_details.name,
|
||||
email: billing_details.email,
|
||||
address: billing_details.address,
|
||||
},
|
||||
iban,
|
||||
bank_account_holder_name,
|
||||
},
|
||||
api_models::payments::BankDebitData::BecsBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
bsb_number,
|
||||
bank_account_holder_name,
|
||||
} => Self::BecsBankDebit {
|
||||
billing_details: BankDebitBilling {
|
||||
name: billing_details.name,
|
||||
email: billing_details.email,
|
||||
address: billing_details.address,
|
||||
},
|
||||
account_number,
|
||||
bsb_number,
|
||||
bank_account_holder_name,
|
||||
},
|
||||
api_models::payments::BankDebitData::BacsBankDebit {
|
||||
billing_details,
|
||||
account_number,
|
||||
sort_code,
|
||||
bank_account_holder_name,
|
||||
} => Self::BacsBankDebit {
|
||||
billing_details: BankDebitBilling {
|
||||
name: billing_details.name,
|
||||
email: billing_details.email,
|
||||
address: billing_details.address,
|
||||
},
|
||||
account_number,
|
||||
sort_code,
|
||||
bank_account_holder_name,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user