refactor(payment_methods): add BankTransfer payment method data to new domain type to be used in connector module (#4260)

Co-authored-by: Narayan Bhat <narayan.bhat@juspay.in>
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Swangi Kumari
2024-04-12 15:54:05 +05:30
committed by GitHub
parent 53697fb472
commit 08d08114be
8 changed files with 339 additions and 176 deletions

View File

@ -2414,13 +2414,11 @@ impl<'a> TryFrom<(&domain::BankRedirectData, Option<bool>)> for AdyenPaymentMeth
}
}
impl<'a> TryFrom<&api_models::payments::BankTransferData> for AdyenPaymentMethod<'a> {
impl<'a> TryFrom<&domain::BankTransferData> for AdyenPaymentMethod<'a> {
type Error = Error;
fn try_from(
bank_transfer_data: &api_models::payments::BankTransferData,
) -> Result<Self, Self::Error> {
fn try_from(bank_transfer_data: &domain::BankTransferData) -> Result<Self, Self::Error> {
match bank_transfer_data {
payments::BankTransferData::PermataBankTransfer {
domain::BankTransferData::PermataBankTransfer {
ref billing_details,
} => Ok(AdyenPaymentMethod::PermataBankTransfer(Box::new(
DokuBankData {
@ -2429,7 +2427,7 @@ impl<'a> TryFrom<&api_models::payments::BankTransferData> for AdyenPaymentMethod
shopper_email: billing_details.email.clone(),
},
))),
payments::BankTransferData::BcaBankTransfer {
domain::BankTransferData::BcaBankTransfer {
ref billing_details,
} => Ok(AdyenPaymentMethod::BcaBankTransfer(Box::new(
DokuBankData {
@ -2438,52 +2436,52 @@ impl<'a> TryFrom<&api_models::payments::BankTransferData> for AdyenPaymentMethod
shopper_email: billing_details.email.clone(),
},
))),
payments::BankTransferData::BniVaBankTransfer {
domain::BankTransferData::BniVaBankTransfer {
ref billing_details,
} => Ok(AdyenPaymentMethod::BniVa(Box::new(DokuBankData {
first_name: billing_details.first_name.clone(),
last_name: billing_details.last_name.clone(),
shopper_email: billing_details.email.clone(),
}))),
payments::BankTransferData::BriVaBankTransfer {
domain::BankTransferData::BriVaBankTransfer {
ref billing_details,
} => Ok(AdyenPaymentMethod::BriVa(Box::new(DokuBankData {
first_name: billing_details.first_name.clone(),
last_name: billing_details.last_name.clone(),
shopper_email: billing_details.email.clone(),
}))),
payments::BankTransferData::CimbVaBankTransfer {
domain::BankTransferData::CimbVaBankTransfer {
ref billing_details,
} => Ok(AdyenPaymentMethod::CimbVa(Box::new(DokuBankData {
first_name: billing_details.first_name.clone(),
last_name: billing_details.last_name.clone(),
shopper_email: billing_details.email.clone(),
}))),
payments::BankTransferData::DanamonVaBankTransfer {
domain::BankTransferData::DanamonVaBankTransfer {
ref billing_details,
} => Ok(AdyenPaymentMethod::DanamonVa(Box::new(DokuBankData {
first_name: billing_details.first_name.clone(),
last_name: billing_details.last_name.clone(),
shopper_email: billing_details.email.clone(),
}))),
payments::BankTransferData::MandiriVaBankTransfer {
domain::BankTransferData::MandiriVaBankTransfer {
ref billing_details,
} => Ok(AdyenPaymentMethod::MandiriVa(Box::new(DokuBankData {
first_name: billing_details.first_name.clone(),
last_name: billing_details.last_name.clone(),
shopper_email: billing_details.email.clone(),
}))),
api_models::payments::BankTransferData::Pix {} => {
domain::BankTransferData::Pix {} => {
Ok(AdyenPaymentMethod::Pix(Box::new(PmdForPaymentType {
payment_type: PaymentType::Pix,
})))
}
api_models::payments::BankTransferData::AchBankTransfer { .. }
| api_models::payments::BankTransferData::SepaBankTransfer { .. }
| api_models::payments::BankTransferData::BacsBankTransfer { .. }
| api_models::payments::BankTransferData::MultibancoBankTransfer { .. }
| api_models::payments::BankTransferData::LocalBankTransfer { .. }
| payments::BankTransferData::Pse {} => Err(errors::ConnectorError::NotImplemented(
domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::SepaBankTransfer { .. }
| domain::BankTransferData::BacsBankTransfer { .. }
| domain::BankTransferData::MultibancoBankTransfer { .. }
| domain::BankTransferData::LocalBankTransfer { .. }
| domain::BankTransferData::Pse {} => Err(errors::ConnectorError::NotImplemented(
utils::get_unimplemented_payment_method_error_message("Adyen"),
)
.into()),
@ -2791,7 +2789,7 @@ impl<'a>
impl<'a>
TryFrom<(
&AdyenRouterData<&types::PaymentsAuthorizeRouterData>,
&api_models::payments::BankTransferData,
&domain::BankTransferData,
)> for AdyenPaymentRequest<'a>
{
type Error = Error;
@ -2799,7 +2797,7 @@ impl<'a>
fn try_from(
value: (
&AdyenRouterData<&types::PaymentsAuthorizeRouterData>,
&api_models::payments::BankTransferData,
&domain::BankTransferData,
),
) -> Result<Self, Self::Error> {
let (item, bank_transfer_data) = value;

View File

@ -674,24 +674,24 @@ impl TryFrom<&domain::BankDebitData> for PaypalPaymentsRequest {
}
}
impl TryFrom<&api_models::payments::BankTransferData> for PaypalPaymentsRequest {
impl TryFrom<&domain::BankTransferData> for PaypalPaymentsRequest {
type Error = error_stack::Report<errors::ConnectorError>;
fn try_from(value: &api_models::payments::BankTransferData) -> Result<Self, Self::Error> {
fn try_from(value: &domain::BankTransferData) -> Result<Self, Self::Error> {
match value {
api_models::payments::BankTransferData::AchBankTransfer { .. }
| api_models::payments::BankTransferData::SepaBankTransfer { .. }
| api_models::payments::BankTransferData::BacsBankTransfer { .. }
| api_models::payments::BankTransferData::MultibancoBankTransfer { .. }
| api_models::payments::BankTransferData::PermataBankTransfer { .. }
| api_models::payments::BankTransferData::BcaBankTransfer { .. }
| api_models::payments::BankTransferData::BniVaBankTransfer { .. }
| api_models::payments::BankTransferData::BriVaBankTransfer { .. }
| api_models::payments::BankTransferData::CimbVaBankTransfer { .. }
| api_models::payments::BankTransferData::DanamonVaBankTransfer { .. }
| api_models::payments::BankTransferData::MandiriVaBankTransfer { .. }
| api_models::payments::BankTransferData::Pix {}
| api_models::payments::BankTransferData::Pse {}
| api_models::payments::BankTransferData::LocalBankTransfer { .. } => {
domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::SepaBankTransfer { .. }
| domain::BankTransferData::BacsBankTransfer { .. }
| domain::BankTransferData::MultibancoBankTransfer { .. }
| domain::BankTransferData::PermataBankTransfer { .. }
| domain::BankTransferData::BcaBankTransfer { .. }
| domain::BankTransferData::BniVaBankTransfer { .. }
| domain::BankTransferData::BriVaBankTransfer { .. }
| domain::BankTransferData::CimbVaBankTransfer { .. }
| domain::BankTransferData::DanamonVaBankTransfer { .. }
| domain::BankTransferData::MandiriVaBankTransfer { .. }
| domain::BankTransferData::Pix {}
| domain::BankTransferData::Pse {}
| domain::BankTransferData::LocalBankTransfer { .. } => {
Err(errors::ConnectorError::NotImplemented(
utils::get_unimplemented_payment_method_error_message("Paypal"),
)

View File

@ -214,26 +214,24 @@ impl TryFrom<&domain::WalletData> for Shift4PaymentMethod {
}
}
impl TryFrom<&api_models::payments::BankTransferData> for Shift4PaymentMethod {
impl TryFrom<&domain::BankTransferData> for Shift4PaymentMethod {
type Error = Error;
fn try_from(
bank_transfer_data: &api_models::payments::BankTransferData,
) -> Result<Self, Self::Error> {
fn try_from(bank_transfer_data: &domain::BankTransferData) -> Result<Self, Self::Error> {
match bank_transfer_data {
payments::BankTransferData::MultibancoBankTransfer { .. }
| payments::BankTransferData::AchBankTransfer { .. }
| payments::BankTransferData::SepaBankTransfer { .. }
| payments::BankTransferData::BacsBankTransfer { .. }
| payments::BankTransferData::PermataBankTransfer { .. }
| payments::BankTransferData::BcaBankTransfer { .. }
| payments::BankTransferData::BniVaBankTransfer { .. }
| payments::BankTransferData::BriVaBankTransfer { .. }
| payments::BankTransferData::CimbVaBankTransfer { .. }
| payments::BankTransferData::DanamonVaBankTransfer { .. }
| payments::BankTransferData::MandiriVaBankTransfer { .. }
| payments::BankTransferData::Pix {}
| payments::BankTransferData::Pse {}
| payments::BankTransferData::LocalBankTransfer { .. } => {
domain::BankTransferData::MultibancoBankTransfer { .. }
| domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::SepaBankTransfer { .. }
| domain::BankTransferData::BacsBankTransfer { .. }
| domain::BankTransferData::PermataBankTransfer { .. }
| domain::BankTransferData::BcaBankTransfer { .. }
| domain::BankTransferData::BniVaBankTransfer { .. }
| domain::BankTransferData::BriVaBankTransfer { .. }
| domain::BankTransferData::CimbVaBankTransfer { .. }
| domain::BankTransferData::DanamonVaBankTransfer { .. }
| domain::BankTransferData::MandiriVaBankTransfer { .. }
| domain::BankTransferData::Pix { .. }
| domain::BankTransferData::Pse {}
| domain::BankTransferData::LocalBankTransfer { .. } => {
Err(errors::ConnectorError::NotImplemented(
utils::get_unimplemented_payment_method_error_message("Shift4"),
)

View File

@ -823,10 +823,10 @@ impl
connectors: &settings::Connectors,
) -> CustomResult<String, errors::ConnectorError> {
match &req.request.payment_method_data {
domain::payments::PaymentMethodData::BankTransfer(bank_transfer_data) => {
domain::PaymentMethodData::BankTransfer(bank_transfer_data) => {
match bank_transfer_data.deref() {
api_models::payments::BankTransferData::AchBankTransfer { .. }
| api_models::payments::BankTransferData::MultibancoBankTransfer { .. } => {
domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::MultibancoBankTransfer { .. } => {
Ok(format!("{}{}", self.base_url(connectors), "v1/charges"))
}
_ => Ok(format!(
@ -850,7 +850,7 @@ impl
_connectors: &settings::Connectors,
) -> CustomResult<RequestContent, errors::ConnectorError> {
match &req.request.payment_method_data {
domain::payments::PaymentMethodData::BankTransfer(bank_transfer_data) => {
domain::PaymentMethodData::BankTransfer(bank_transfer_data) => {
stripe::get_bank_transfer_request_data(req, bank_transfer_data.deref())
}
_ => {
@ -890,45 +890,41 @@ impl
res: types::Response,
) -> CustomResult<types::PaymentsAuthorizeRouterData, errors::ConnectorError> {
match &data.request.payment_method_data {
domain::payments::PaymentMethodData::BankTransfer(bank_transfer_data) => {
match bank_transfer_data.deref() {
api_models::payments::BankTransferData::AchBankTransfer { .. }
| api_models::payments::BankTransferData::MultibancoBankTransfer { .. } => {
let response: stripe::ChargesResponse = res
.response
.parse_struct("ChargesResponse")
.change_context(
errors::ConnectorError::ResponseDeserializationFailed,
)?;
domain::PaymentMethodData::BankTransfer(bank_transfer_data) => match bank_transfer_data
.deref()
{
domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::MultibancoBankTransfer { .. } => {
let response: stripe::ChargesResponse = res
.response
.parse_struct("ChargesResponse")
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);
types::RouterData::try_from(types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
})
}
_ => {
let response: stripe::PaymentIntentResponse = res
.response
.parse_struct("PaymentIntentResponse")
.change_context(
errors::ConnectorError::ResponseDeserializationFailed,
)?;
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);
types::RouterData::try_from(types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
})
}
types::RouterData::try_from(types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
})
}
}
_ => {
let response: stripe::PaymentIntentResponse = res
.response
.parse_struct("PaymentIntentResponse")
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);
types::RouterData::try_from(types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
})
}
},
_ => {
let response: stripe::PaymentIntentResponse = res
.response

View File

@ -1,6 +1,6 @@
use std::{collections::HashMap, ops::Deref};
use api_models::{self, enums as api_enums, payments};
use api_models::{self, enums as api_enums};
use common_utils::{
errors::CustomResult,
ext_traits::{ByteSliceExt, Encode},
@ -1341,7 +1341,7 @@ fn create_stripe_payment_method(
}
domain::PaymentMethodData::BankTransfer(bank_transfer_data) => {
match bank_transfer_data.deref() {
payments::BankTransferData::AchBankTransfer { billing_details } => Ok((
domain::BankTransferData::AchBankTransfer { billing_details } => Ok((
StripePaymentMethodData::BankTransfer(StripeBankTransferData::AchBankTransfer(
Box::new(AchTransferData {
email: billing_details.email.to_owned(),
@ -1350,7 +1350,7 @@ fn create_stripe_payment_method(
None,
StripeBillingAddress::default(),
)),
payments::BankTransferData::MultibancoBankTransfer { billing_details } => Ok((
domain::BankTransferData::MultibancoBankTransfer { billing_details } => Ok((
StripePaymentMethodData::BankTransfer(
StripeBankTransferData::MultibancoBankTransfers(Box::new(
MultibancoTransferData {
@ -1361,7 +1361,7 @@ fn create_stripe_payment_method(
None,
StripeBillingAddress::default(),
)),
payments::BankTransferData::SepaBankTransfer {
domain::BankTransferData::SepaBankTransfer {
billing_details,
country,
} => {
@ -1387,7 +1387,7 @@ fn create_stripe_payment_method(
billing_details,
))
}
payments::BankTransferData::BacsBankTransfer { billing_details } => {
domain::BankTransferData::BacsBankTransfer { billing_details } => {
let billing_details = StripeBillingAddress {
email: Some(billing_details.email.clone()),
name: Some(billing_details.name.clone()),
@ -1409,19 +1409,19 @@ fn create_stripe_payment_method(
billing_details,
))
}
payments::BankTransferData::Pix {} => Err(errors::ConnectorError::NotImplemented(
domain::BankTransferData::Pix {} => Err(errors::ConnectorError::NotImplemented(
connector_util::get_unimplemented_payment_method_error_message("stripe"),
)
.into()),
payments::BankTransferData::Pse {}
| payments::BankTransferData::LocalBankTransfer { .. }
| payments::BankTransferData::PermataBankTransfer { .. }
| payments::BankTransferData::BcaBankTransfer { .. }
| payments::BankTransferData::BniVaBankTransfer { .. }
| payments::BankTransferData::BriVaBankTransfer { .. }
| payments::BankTransferData::CimbVaBankTransfer { .. }
| payments::BankTransferData::DanamonVaBankTransfer { .. }
| payments::BankTransferData::MandiriVaBankTransfer { .. } => {
domain::BankTransferData::Pse {}
| domain::BankTransferData::LocalBankTransfer { .. }
| domain::BankTransferData::PermataBankTransfer { .. }
| domain::BankTransferData::BcaBankTransfer { .. }
| domain::BankTransferData::BniVaBankTransfer { .. }
| domain::BankTransferData::BriVaBankTransfer { .. }
| domain::BankTransferData::CimbVaBankTransfer { .. }
| domain::BankTransferData::DanamonVaBankTransfer { .. }
| domain::BankTransferData::MandiriVaBankTransfer { .. } => {
Err(errors::ConnectorError::NotImplemented(
connector_util::get_unimplemented_payment_method_error_message("stripe"),
)
@ -3239,7 +3239,7 @@ impl TryFrom<&types::PaymentsPreProcessingRouterData> for StripeCreditTransferSo
match &item.request.payment_method_data {
Some(domain::PaymentMethodData::BankTransfer(bank_transfer_data)) => {
match **bank_transfer_data {
payments::BankTransferData::MultibancoBankTransfer { .. } => Ok(
domain::BankTransferData::MultibancoBankTransfer { .. } => Ok(
Self::MultibancoBankTansfer(MultibancoCreditTransferSourceRequest {
transfer_type: StripeCreditTransferTypes::Multibanco,
currency,
@ -3250,7 +3250,7 @@ impl TryFrom<&types::PaymentsPreProcessingRouterData> for StripeCreditTransferSo
return_url: Some(item.get_return_url()?),
}),
),
payments::BankTransferData::AchBankTransfer { .. } => {
domain::BankTransferData::AchBankTransfer { .. } => {
Ok(Self::AchBankTansfer(AchCreditTransferSourceRequest {
transfer_type: StripeCreditTransferTypes::AchCreditTransfer,
payment_method_data: AchTransferData {
@ -3259,18 +3259,18 @@ impl TryFrom<&types::PaymentsPreProcessingRouterData> for StripeCreditTransferSo
currency,
}))
}
payments::BankTransferData::SepaBankTransfer { .. }
| payments::BankTransferData::BacsBankTransfer { .. }
| payments::BankTransferData::PermataBankTransfer { .. }
| payments::BankTransferData::BcaBankTransfer { .. }
| payments::BankTransferData::BniVaBankTransfer { .. }
| payments::BankTransferData::BriVaBankTransfer { .. }
| payments::BankTransferData::CimbVaBankTransfer { .. }
| payments::BankTransferData::DanamonVaBankTransfer { .. }
| payments::BankTransferData::MandiriVaBankTransfer { .. }
| payments::BankTransferData::LocalBankTransfer { .. }
| payments::BankTransferData::Pix { .. }
| payments::BankTransferData::Pse { .. } => {
domain::BankTransferData::SepaBankTransfer { .. }
| domain::BankTransferData::BacsBankTransfer { .. }
| domain::BankTransferData::PermataBankTransfer { .. }
| domain::BankTransferData::BcaBankTransfer { .. }
| domain::BankTransferData::BniVaBankTransfer { .. }
| domain::BankTransferData::BriVaBankTransfer { .. }
| domain::BankTransferData::CimbVaBankTransfer { .. }
| domain::BankTransferData::DanamonVaBankTransfer { .. }
| domain::BankTransferData::MandiriVaBankTransfer { .. }
| domain::BankTransferData::LocalBankTransfer { .. }
| domain::BankTransferData::Pix { .. }
| domain::BankTransferData::Pse { .. } => {
Err(errors::ConnectorError::NotImplemented(
connector_util::get_unimplemented_payment_method_error_message(
"stripe",
@ -3685,21 +3685,21 @@ impl
domain::PaymentMethodData::BankTransfer(bank_transfer_data) => match bank_transfer_data
.deref()
{
payments::BankTransferData::AchBankTransfer { billing_details } => {
domain::BankTransferData::AchBankTransfer { billing_details } => {
Ok(Self::BankTransfer(StripeBankTransferData::AchBankTransfer(
Box::new(AchTransferData {
email: billing_details.email.to_owned(),
}),
)))
}
payments::BankTransferData::MultibancoBankTransfer { billing_details } => Ok(
domain::BankTransferData::MultibancoBankTransfer { billing_details } => Ok(
Self::BankTransfer(StripeBankTransferData::MultibancoBankTransfers(Box::new(
MultibancoTransferData {
email: billing_details.email.to_owned(),
},
))),
),
payments::BankTransferData::SepaBankTransfer { country, .. } => {
domain::BankTransferData::SepaBankTransfer { country, .. } => {
Ok(Self::BankTransfer(
StripeBankTransferData::SepaBankTransfer(Box::new(SepaBankTransferData {
payment_method_data_type: StripePaymentMethodType::CustomerBalance,
@ -3710,7 +3710,7 @@ impl
})),
))
}
payments::BankTransferData::BacsBankTransfer { .. } => Ok(Self::BankTransfer(
domain::BankTransferData::BacsBankTransfer { .. } => Ok(Self::BankTransfer(
StripeBankTransferData::BacsBankTransfers(Box::new(BacsBankTransferData {
payment_method_data_type: StripePaymentMethodType::CustomerBalance,
bank_transfer_type: BankTransferType::GbBankTransfer,
@ -3718,16 +3718,16 @@ impl
payment_method_type: StripePaymentMethodType::CustomerBalance,
})),
)),
payments::BankTransferData::Pix {}
| payments::BankTransferData::Pse {}
| payments::BankTransferData::PermataBankTransfer { .. }
| payments::BankTransferData::BcaBankTransfer { .. }
| payments::BankTransferData::BniVaBankTransfer { .. }
| payments::BankTransferData::BriVaBankTransfer { .. }
| payments::BankTransferData::CimbVaBankTransfer { .. }
| payments::BankTransferData::DanamonVaBankTransfer { .. }
| payments::BankTransferData::LocalBankTransfer { .. }
| payments::BankTransferData::MandiriVaBankTransfer { .. } => {
domain::BankTransferData::Pix {}
| domain::BankTransferData::Pse {}
| domain::BankTransferData::PermataBankTransfer { .. }
| domain::BankTransferData::BcaBankTransfer { .. }
| domain::BankTransferData::BniVaBankTransfer { .. }
| domain::BankTransferData::BriVaBankTransfer { .. }
| domain::BankTransferData::CimbVaBankTransfer { .. }
| domain::BankTransferData::DanamonVaBankTransfer { .. }
| domain::BankTransferData::LocalBankTransfer { .. }
| domain::BankTransferData::MandiriVaBankTransfer { .. } => {
Err(errors::ConnectorError::NotImplemented(
connector_util::get_unimplemented_payment_method_error_message("stripe"),
)
@ -3757,11 +3757,11 @@ pub struct StripeGpayToken {
pub fn get_bank_transfer_request_data(
req: &types::PaymentsAuthorizeRouterData,
bank_transfer_data: &api_models::payments::BankTransferData,
bank_transfer_data: &domain::BankTransferData,
) -> CustomResult<RequestContent, errors::ConnectorError> {
match bank_transfer_data {
api_models::payments::BankTransferData::AchBankTransfer { .. }
| api_models::payments::BankTransferData::MultibancoBankTransfer { .. } => {
domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::MultibancoBankTransfer { .. } => {
let req = ChargesRequest::try_from(req)?;
Ok(RequestContent::FormUrlEncoded(Box::new(req)))
}

View File

@ -311,14 +311,14 @@ impl
impl
TryFrom<(
&ZenRouterData<&types::PaymentsAuthorizeRouterData>,
&Box<api_models::payments::BankTransferData>,
&Box<domain::BankTransferData>,
)> for ZenPaymentsRequest
{
type Error = error_stack::Report<errors::ConnectorError>;
fn try_from(
value: (
&ZenRouterData<&types::PaymentsAuthorizeRouterData>,
&Box<api_models::payments::BankTransferData>,
&Box<domain::BankTransferData>,
),
) -> Result<Self, Self::Error> {
let (item, bank_transfer_data) = value;
@ -332,26 +332,22 @@ impl
return_url: item.router_data.request.get_router_return_url()?,
});
let payment_channel = match **bank_transfer_data {
api_models::payments::BankTransferData::MultibancoBankTransfer { .. } => {
domain::BankTransferData::MultibancoBankTransfer { .. } => {
ZenPaymentChannels::PclBoacompraMultibanco
}
api_models::payments::BankTransferData::Pix { .. } => {
ZenPaymentChannels::PclBoacompraPix
}
api_models::payments::BankTransferData::Pse { .. } => {
ZenPaymentChannels::PclBoacompraPse
}
api_models::payments::BankTransferData::SepaBankTransfer { .. }
| api_models::payments::BankTransferData::AchBankTransfer { .. }
| api_models::payments::BankTransferData::BacsBankTransfer { .. }
| api_models::payments::BankTransferData::PermataBankTransfer { .. }
| api_models::payments::BankTransferData::BcaBankTransfer { .. }
| api_models::payments::BankTransferData::BniVaBankTransfer { .. }
| api_models::payments::BankTransferData::BriVaBankTransfer { .. }
| api_models::payments::BankTransferData::CimbVaBankTransfer { .. }
| api_models::payments::BankTransferData::DanamonVaBankTransfer { .. }
| api_models::payments::BankTransferData::LocalBankTransfer { .. }
| api_models::payments::BankTransferData::MandiriVaBankTransfer { .. } => {
domain::BankTransferData::Pix { .. } => ZenPaymentChannels::PclBoacompraPix,
domain::BankTransferData::Pse { .. } => ZenPaymentChannels::PclBoacompraPse,
domain::BankTransferData::SepaBankTransfer { .. }
| domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::BacsBankTransfer { .. }
| domain::BankTransferData::PermataBankTransfer { .. }
| domain::BankTransferData::BcaBankTransfer { .. }
| domain::BankTransferData::BniVaBankTransfer { .. }
| domain::BankTransferData::BriVaBankTransfer { .. }
| domain::BankTransferData::CimbVaBankTransfer { .. }
| domain::BankTransferData::DanamonVaBankTransfer { .. }
| domain::BankTransferData::LocalBankTransfer { .. }
| domain::BankTransferData::MandiriVaBankTransfer { .. } => {
Err(errors::ConnectorError::NotImplemented(
utils::get_unimplemented_payment_method_error_message("Zen"),
))?

View File

@ -148,25 +148,25 @@ impl TryFrom<&ZslRouterData<&types::PaymentsAuthorizeRouterData>> for ZslPayment
let payment_method = match item.router_data.request.payment_method_data.clone() {
domain::PaymentMethodData::BankTransfer(bank_transfer_data) => {
match *bank_transfer_data {
api_models::payments::BankTransferData::LocalBankTransfer { bank_code } => Ok(
domain::BankTransferData::LocalBankTransfer { bank_code } => Ok(
ZslPaymentMethods::LocalBankTransfer(LocalBankTransaferRequest {
bank_code,
pay_method: None,
}),
),
api_models::payments::BankTransferData::AchBankTransfer { .. }
| api_models::payments::BankTransferData::SepaBankTransfer { .. }
| api_models::payments::BankTransferData::BacsBankTransfer { .. }
| api_models::payments::BankTransferData::MultibancoBankTransfer { .. }
| api_models::payments::BankTransferData::PermataBankTransfer { .. }
| api_models::payments::BankTransferData::BcaBankTransfer { .. }
| api_models::payments::BankTransferData::BniVaBankTransfer { .. }
| api_models::payments::BankTransferData::BriVaBankTransfer { .. }
| api_models::payments::BankTransferData::CimbVaBankTransfer { .. }
| api_models::payments::BankTransferData::DanamonVaBankTransfer { .. }
| api_models::payments::BankTransferData::MandiriVaBankTransfer { .. }
| api_models::payments::BankTransferData::Pix {}
| api_models::payments::BankTransferData::Pse {} => {
domain::BankTransferData::AchBankTransfer { .. }
| domain::BankTransferData::SepaBankTransfer { .. }
| domain::BankTransferData::BacsBankTransfer { .. }
| domain::BankTransferData::MultibancoBankTransfer { .. }
| domain::BankTransferData::PermataBankTransfer { .. }
| domain::BankTransferData::BcaBankTransfer { .. }
| domain::BankTransferData::BniVaBankTransfer { .. }
| domain::BankTransferData::BriVaBankTransfer { .. }
| domain::BankTransferData::CimbVaBankTransfer { .. }
| domain::BankTransferData::DanamonVaBankTransfer { .. }
| domain::BankTransferData::MandiriVaBankTransfer { .. }
| domain::BankTransferData::Pix {}
| domain::BankTransferData::Pse {} => {
Err(errors::ConnectorError::NotImplemented(
connector_utils::get_unimplemented_payment_method_error_message(
item.router_data.connector.as_str(),

View File

@ -12,7 +12,7 @@ pub enum PaymentMethodData {
PayLater(PayLaterData),
BankRedirect(BankRedirectData),
BankDebit(BankDebitData),
BankTransfer(Box<api_models::payments::BankTransferData>),
BankTransfer(Box<BankTransferData>),
Crypto(CryptoData),
MandatePayment,
Reward,
@ -451,6 +451,92 @@ pub struct BankDebitBilling {
pub address: Option<api_models::payments::AddressDetails>,
}
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub enum BankTransferData {
AchBankTransfer {
/// The billing details for ACH Bank Transfer
billing_details: AchBillingDetails,
},
SepaBankTransfer {
/// The billing details for SEPA
billing_details: SepaAndBacsBillingDetails,
/// The two-letter ISO country code for SEPA and BACS
country: api_models::enums::CountryAlpha2,
},
BacsBankTransfer {
/// The billing details for SEPA
billing_details: SepaAndBacsBillingDetails,
},
MultibancoBankTransfer {
/// The billing details for Multibanco
billing_details: MultibancoBillingDetails,
},
PermataBankTransfer {
/// The billing details for Permata Bank Transfer
billing_details: DokuBillingDetails,
},
BcaBankTransfer {
/// The billing details for BCA Bank Transfer
billing_details: DokuBillingDetails,
},
BniVaBankTransfer {
/// The billing details for BniVa Bank Transfer
billing_details: DokuBillingDetails,
},
BriVaBankTransfer {
/// The billing details for BniVa Bank Transfer
billing_details: DokuBillingDetails,
},
CimbVaBankTransfer {
/// The billing details for BniVa Bank Transfer
billing_details: DokuBillingDetails,
},
DanamonVaBankTransfer {
/// The billing details for BniVa Bank Transfer
billing_details: DokuBillingDetails,
},
MandiriVaBankTransfer {
/// The billing details for BniVa Bank Transfer
billing_details: DokuBillingDetails,
},
Pix {},
Pse {},
LocalBankTransfer {
bank_code: Option<String>,
},
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AchBillingDetails {
/// The Email ID for ACH billing
pub email: Email,
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct DokuBillingDetails {
/// The billing first name for Doku
pub first_name: Secret<String>,
/// The billing second name for Doku
pub last_name: Option<Secret<String>>,
/// The Email ID for Doku billing
pub email: Email,
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct MultibancoBillingDetails {
pub email: Email,
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct SepaAndBacsBillingDetails {
/// The Email ID for SEPA and BACS billing
pub email: Email,
/// The billing name for SEPA and BACS billing
pub name: Secret<String>,
}
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 {
@ -473,7 +559,7 @@ impl From<api_models::payments::PaymentMethodData> for PaymentMethodData {
Self::BankDebit(From::from(bank_debit_data))
}
api_models::payments::PaymentMethodData::BankTransfer(bank_transfer_data) => {
Self::BankTransfer(bank_transfer_data)
Self::BankTransfer(Box::new(From::from(*bank_transfer_data)))
}
api_models::payments::PaymentMethodData::Crypto(crypto_data) => {
Self::Crypto(From::from(crypto_data))
@ -940,3 +1026,92 @@ impl From<api_models::payments::BankDebitData> for BankDebitData {
}
}
}
impl From<api_models::payments::BankTransferData> for BankTransferData {
fn from(value: api_models::payments::BankTransferData) -> Self {
match value {
api_models::payments::BankTransferData::AchBankTransfer { billing_details } => {
Self::AchBankTransfer {
billing_details: AchBillingDetails {
email: billing_details.email,
},
}
}
api_models::payments::BankTransferData::SepaBankTransfer {
billing_details,
country,
} => Self::SepaBankTransfer {
billing_details: SepaAndBacsBillingDetails {
email: billing_details.email,
name: billing_details.name,
},
country,
},
api_models::payments::BankTransferData::BacsBankTransfer { billing_details } => {
Self::BacsBankTransfer {
billing_details: SepaAndBacsBillingDetails {
email: billing_details.email,
name: billing_details.name,
},
}
}
api_models::payments::BankTransferData::MultibancoBankTransfer { billing_details } => {
Self::MultibancoBankTransfer {
billing_details: MultibancoBillingDetails {
email: billing_details.email,
},
}
}
api_models::payments::BankTransferData::PermataBankTransfer { billing_details } => {
Self::PermataBankTransfer {
billing_details: DokuBillingDetails::from(billing_details),
}
}
api_models::payments::BankTransferData::BcaBankTransfer { billing_details } => {
Self::BcaBankTransfer {
billing_details: DokuBillingDetails::from(billing_details),
}
}
api_models::payments::BankTransferData::BniVaBankTransfer { billing_details } => {
Self::BniVaBankTransfer {
billing_details: DokuBillingDetails::from(billing_details),
}
}
api_models::payments::BankTransferData::BriVaBankTransfer { billing_details } => {
Self::BriVaBankTransfer {
billing_details: DokuBillingDetails::from(billing_details),
}
}
api_models::payments::BankTransferData::CimbVaBankTransfer { billing_details } => {
Self::CimbVaBankTransfer {
billing_details: DokuBillingDetails::from(billing_details),
}
}
api_models::payments::BankTransferData::DanamonVaBankTransfer { billing_details } => {
Self::DanamonVaBankTransfer {
billing_details: DokuBillingDetails::from(billing_details),
}
}
api_models::payments::BankTransferData::MandiriVaBankTransfer { billing_details } => {
Self::MandiriVaBankTransfer {
billing_details: DokuBillingDetails::from(billing_details),
}
}
api_models::payments::BankTransferData::Pix {} => Self::Pix {},
api_models::payments::BankTransferData::Pse {} => Self::Pse {},
api_models::payments::BankTransferData::LocalBankTransfer { bank_code } => {
Self::LocalBankTransfer { bank_code }
}
}
}
}
impl From<api_models::payments::DokuBillingDetails> for DokuBillingDetails {
fn from(billing: api_models::payments::DokuBillingDetails) -> Self {
Self {
first_name: billing.first_name,
last_name: billing.last_name,
email: billing.email,
}
}
}