mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 12:15:40 +08:00
feat(router): add support for co-badged cards (#5801)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -8,6 +8,7 @@ use cards::CardNumber;
|
||||
use common_utils::{
|
||||
consts::default_payments_list_limit,
|
||||
crypto,
|
||||
errors::ValidationError,
|
||||
ext_traits::{ConfigExt, Encode, ValueExt},
|
||||
hashing::HashedString,
|
||||
id_type,
|
||||
@ -1396,8 +1397,23 @@ impl GetAddressFromPaymentMethodData for Card {
|
||||
}
|
||||
|
||||
impl Card {
|
||||
fn apply_additional_card_info(&self, additional_card_info: AdditionalCardInfo) -> Self {
|
||||
Self {
|
||||
fn apply_additional_card_info(
|
||||
&self,
|
||||
additional_card_info: AdditionalCardInfo,
|
||||
) -> Result<Self, error_stack::Report<ValidationError>> {
|
||||
let card_network = self
|
||||
.card_network
|
||||
.clone()
|
||||
.or(additional_card_info.card_network.clone())
|
||||
.map(|network| match self.card_number.is_cobadged_card() {
|
||||
Ok(true) => Ok(Some(network)),
|
||||
Ok(false) => Ok(None),
|
||||
Err(e) => Err(e),
|
||||
})
|
||||
.transpose()?
|
||||
.flatten();
|
||||
|
||||
Ok(Self {
|
||||
card_number: self.card_number.clone(),
|
||||
card_exp_month: self.card_exp_month.clone(),
|
||||
card_exp_year: self.card_exp_year.clone(),
|
||||
@ -1407,10 +1423,7 @@ impl Card {
|
||||
.card_issuer
|
||||
.clone()
|
||||
.or(additional_card_info.card_issuer),
|
||||
card_network: self
|
||||
.card_network
|
||||
.clone()
|
||||
.or(additional_card_info.card_network),
|
||||
card_network,
|
||||
card_type: self.card_type.clone().or(additional_card_info.card_type),
|
||||
card_issuing_country: self
|
||||
.card_issuing_country
|
||||
@ -1418,7 +1431,7 @@ impl Card {
|
||||
.or(additional_card_info.card_issuing_country),
|
||||
bank_code: self.bank_code.clone().or(additional_card_info.bank_code),
|
||||
nick_name: self.nick_name.clone(),
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -1858,16 +1871,16 @@ impl PaymentMethodData {
|
||||
pub fn apply_additional_payment_data(
|
||||
&self,
|
||||
additional_payment_data: AdditionalPaymentData,
|
||||
) -> Self {
|
||||
) -> Result<Self, error_stack::Report<ValidationError>> {
|
||||
if let AdditionalPaymentData::Card(additional_card_info) = additional_payment_data {
|
||||
match self {
|
||||
Self::Card(card) => {
|
||||
Self::Card(card.apply_additional_card_info(*additional_card_info))
|
||||
}
|
||||
_ => self.to_owned(),
|
||||
Self::Card(card) => Ok(Self::Card(
|
||||
card.apply_additional_card_info(*additional_card_info)?,
|
||||
)),
|
||||
_ => Ok(self.to_owned()),
|
||||
}
|
||||
} else {
|
||||
self.to_owned()
|
||||
Ok(self.to_owned())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user