mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 17:19:15 +08:00
feat(payouts): add country, currency filters for payout methods (#5130)
Signed-off-by: Chikke Srujan <chikke.srujan@Chikke-Srujan-N7WRTY72X7.local> Co-authored-by: Chikke Srujan <chikke.srujan@Chikke-Srujan-G961M60MK7.local> Co-authored-by: Chikke Srujan <chikke.srujan@Chikke-Srujan-N7WRTY72X7.local> Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -578,8 +578,13 @@ logo = "https://app.hyperswitch.io/HyperswitchFavicon.png"
|
|||||||
merchant_name = "HyperSwitch"
|
merchant_name = "HyperSwitch"
|
||||||
[generic_link.payout_link.enabled_payment_methods]
|
[generic_link.payout_link.enabled_payment_methods]
|
||||||
card = "credit,debit"
|
card = "credit,debit"
|
||||||
bank_transfer = "ach,bacs,sepa"
|
|
||||||
wallet = "paypal,pix,venmo"
|
#Payout Method Filters Based on Country and Currency
|
||||||
|
[payout_method_filters.adyenplatform]
|
||||||
|
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
|
||||||
|
|
||||||
|
[payout_method_filters.stripe]
|
||||||
|
ach = { country = "US", currency = "USD" }
|
||||||
|
|
||||||
[payment_link]
|
[payment_link]
|
||||||
sdk_url = "http://localhost:9090/0.16.7/v0/HyperLoader.js"
|
sdk_url = "http://localhost:9090/0.16.7/v0/HyperLoader.js"
|
||||||
|
|||||||
@ -179,8 +179,6 @@ logo = "https://app.hyperswitch.io/HyperswitchFavicon.png"
|
|||||||
merchant_name = "HyperSwitch"
|
merchant_name = "HyperSwitch"
|
||||||
[generic_link.payout_link.enabled_payment_methods]
|
[generic_link.payout_link.enabled_payment_methods]
|
||||||
card = "credit,debit"
|
card = "credit,debit"
|
||||||
bank_transfer = "ach,bacs,sepa"
|
|
||||||
wallet = "paypal,pix,venmo"
|
|
||||||
|
|
||||||
[payment_link]
|
[payment_link]
|
||||||
sdk_url = "http://localhost:9090/0.16.7/v0/HyperLoader.js"
|
sdk_url = "http://localhost:9090/0.16.7/v0/HyperLoader.js"
|
||||||
|
|||||||
@ -308,6 +308,12 @@ red_pagos = { country = "UY", currency = "UYU" }
|
|||||||
[pm_filters.zsl]
|
[pm_filters.zsl]
|
||||||
local_bank_transfer = { country = "CN", currency = "CNY" }
|
local_bank_transfer = { country = "CN", currency = "CNY" }
|
||||||
|
|
||||||
|
[payout_method_filters.adyenplatform]
|
||||||
|
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
|
||||||
|
|
||||||
|
[payout_method_filters.stripe]
|
||||||
|
ach = { country = "US", currency = "USD" }
|
||||||
|
|
||||||
[temp_locker_enable_config]
|
[temp_locker_enable_config]
|
||||||
bluesnap.payment_method = "card"
|
bluesnap.payment_method = "card"
|
||||||
nuvei.payment_method = "card"
|
nuvei.payment_method = "card"
|
||||||
|
|||||||
@ -327,6 +327,12 @@ red_pagos = { country = "UY", currency = "UYU" }
|
|||||||
[pm_filters.zsl]
|
[pm_filters.zsl]
|
||||||
local_bank_transfer = { country = "CN", currency = "CNY" }
|
local_bank_transfer = { country = "CN", currency = "CNY" }
|
||||||
|
|
||||||
|
[payout_method_filters.adyenplatform]
|
||||||
|
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
|
||||||
|
|
||||||
|
[payout_method_filters.stripe]
|
||||||
|
ach = { country = "US", currency = "USD" }
|
||||||
|
|
||||||
[temp_locker_enable_config]
|
[temp_locker_enable_config]
|
||||||
bluesnap.payment_method = "card"
|
bluesnap.payment_method = "card"
|
||||||
nuvei.payment_method = "card"
|
nuvei.payment_method = "card"
|
||||||
|
|||||||
@ -331,6 +331,12 @@ red_pagos = { country = "UY", currency = "UYU" }
|
|||||||
[pm_filters.zsl]
|
[pm_filters.zsl]
|
||||||
local_bank_transfer = { country = "CN", currency = "CNY" }
|
local_bank_transfer = { country = "CN", currency = "CNY" }
|
||||||
|
|
||||||
|
[payout_method_filters.adyenplatform]
|
||||||
|
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
|
||||||
|
|
||||||
|
[payout_method_filters.stripe]
|
||||||
|
ach = { country = "US", currency = "USD" }
|
||||||
|
|
||||||
[temp_locker_enable_config]
|
[temp_locker_enable_config]
|
||||||
bluesnap.payment_method = "card"
|
bluesnap.payment_method = "card"
|
||||||
nuvei.payment_method = "card"
|
nuvei.payment_method = "card"
|
||||||
|
|||||||
@ -591,8 +591,12 @@ logo = "https://app.hyperswitch.io/HyperswitchFavicon.png"
|
|||||||
merchant_name = "HyperSwitch"
|
merchant_name = "HyperSwitch"
|
||||||
[generic_link.payout_link.enabled_payment_methods]
|
[generic_link.payout_link.enabled_payment_methods]
|
||||||
card = "credit,debit"
|
card = "credit,debit"
|
||||||
bank_transfer = "ach,bacs,sepa"
|
|
||||||
wallet = "paypal,pix,venmo"
|
[payout_method_filters.adyenplatform]
|
||||||
|
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOK,PLN,SEK,GBP,CHF" }
|
||||||
|
|
||||||
|
[payout_method_filters.stripe]
|
||||||
|
ach = { country = "US", currency = "USD" }
|
||||||
|
|
||||||
[payment_link]
|
[payment_link]
|
||||||
sdk_url = "http://localhost:9050/HyperLoader.js"
|
sdk_url = "http://localhost:9050/HyperLoader.js"
|
||||||
|
|||||||
@ -543,5 +543,9 @@ logo = "https://app.hyperswitch.io/HyperswitchFavicon.png"
|
|||||||
merchant_name = "HyperSwitch"
|
merchant_name = "HyperSwitch"
|
||||||
[generic_link.payout_link.enabled_payment_methods]
|
[generic_link.payout_link.enabled_payment_methods]
|
||||||
card = "credit,debit"
|
card = "credit,debit"
|
||||||
bank_transfer = "ach,bacs,sepa"
|
|
||||||
wallet = "paypal,pix,venmo"
|
[payout_method_filters.adyenplatform]
|
||||||
|
sepa = { country = "ES,SK,AT,NL,DE,BE,FR,FI,PT,IE,EE,LT,LV,IT,CZ,DE,HU,NO,PL,SE,GB,CH" , currency = "EUR,CZK,DKK,HUF,NOR,PLN,SEK,GBP,CHF" }
|
||||||
|
|
||||||
|
[payout_method_filters.stripe]
|
||||||
|
ach = { country = "US", currency = "USD" }
|
||||||
|
|||||||
@ -2705,10 +2705,6 @@ api_key="Api Key"
|
|||||||
payment_method_type = "CartesBancaires"
|
payment_method_type = "CartesBancaires"
|
||||||
[[adyen_payout.debit]]
|
[[adyen_payout.debit]]
|
||||||
payment_method_type = "UnionPay"
|
payment_method_type = "UnionPay"
|
||||||
[[adyen_payout.bank_transfer]]
|
|
||||||
payment_method_type = "ach"
|
|
||||||
[[adyen_payout.bank_transfer]]
|
|
||||||
payment_method_type = "bacs"
|
|
||||||
[[adyen_payout.bank_transfer]]
|
[[adyen_payout.bank_transfer]]
|
||||||
payment_method_type = "sepa"
|
payment_method_type = "sepa"
|
||||||
[[adyen_payout.wallet]]
|
[[adyen_payout.wallet]]
|
||||||
|
|||||||
@ -2706,10 +2706,6 @@ api_key="Api Key"
|
|||||||
payment_method_type = "CartesBancaires"
|
payment_method_type = "CartesBancaires"
|
||||||
[[adyen_payout.debit]]
|
[[adyen_payout.debit]]
|
||||||
payment_method_type = "UnionPay"
|
payment_method_type = "UnionPay"
|
||||||
[[adyen_payout.bank_transfer]]
|
|
||||||
payment_method_type = "ach"
|
|
||||||
[[adyen_payout.bank_transfer]]
|
|
||||||
payment_method_type = "bacs"
|
|
||||||
[[adyen_payout.bank_transfer]]
|
[[adyen_payout.bank_transfer]]
|
||||||
payment_method_type = "sepa"
|
payment_method_type = "sepa"
|
||||||
[[adyen_payout.wallet]]
|
[[adyen_payout.wallet]]
|
||||||
|
|||||||
@ -349,6 +349,7 @@ pub(crate) async fn fetch_raw_secrets(
|
|||||||
jwekey,
|
jwekey,
|
||||||
webhooks: conf.webhooks,
|
webhooks: conf.webhooks,
|
||||||
pm_filters: conf.pm_filters,
|
pm_filters: conf.pm_filters,
|
||||||
|
payout_method_filters: conf.payout_method_filters,
|
||||||
bank_config: conf.bank_config,
|
bank_config: conf.bank_config,
|
||||||
api_keys,
|
api_keys,
|
||||||
file_storage: conf.file_storage,
|
file_storage: conf.file_storage,
|
||||||
|
|||||||
@ -101,6 +101,7 @@ pub struct Settings<S: SecretState> {
|
|||||||
pub connector_request_reference_id_config: ConnectorRequestReferenceIdConfig,
|
pub connector_request_reference_id_config: ConnectorRequestReferenceIdConfig,
|
||||||
#[cfg(feature = "payouts")]
|
#[cfg(feature = "payouts")]
|
||||||
pub payouts: Payouts,
|
pub payouts: Payouts,
|
||||||
|
pub payout_method_filters: ConnectorFilters,
|
||||||
pub applepay_decrypt_keys: SecretStateContainer<ApplePayDecryptConifg, S>,
|
pub applepay_decrypt_keys: SecretStateContainer<ApplePayDecryptConifg, S>,
|
||||||
pub multiple_api_version_supported_connectors: MultipleApiVersionSupportedConnectors,
|
pub multiple_api_version_supported_connectors: MultipleApiVersionSupportedConnectors,
|
||||||
pub applepay_merchant_configs: SecretStateContainer<ApplepayMerchantConfigs, S>,
|
pub applepay_merchant_configs: SecretStateContainer<ApplepayMerchantConfigs, S>,
|
||||||
|
|||||||
@ -11,6 +11,7 @@ use error_stack::ResultExt;
|
|||||||
|
|
||||||
use super::errors::{RouterResponse, StorageErrorExt};
|
use super::errors::{RouterResponse, StorageErrorExt};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
configs::settings::{PaymentMethodFilterKey, PaymentMethodFilters},
|
||||||
core::payments::helpers,
|
core::payments::helpers,
|
||||||
errors,
|
errors,
|
||||||
routes::{app::StorageInterface, SessionState},
|
routes::{app::StorageInterface, SessionState},
|
||||||
@ -62,7 +63,7 @@ pub async fn initiate_payout_link(
|
|||||||
let has_expired = common_utils::date_time::now() > payout_link.expiry;
|
let has_expired = common_utils::date_time::now() > payout_link.expiry;
|
||||||
let status = payout_link.link_status.clone();
|
let status = payout_link.link_status.clone();
|
||||||
let link_data = payout_link.link_data.clone();
|
let link_data = payout_link.link_data.clone();
|
||||||
let default_config = &state.conf.generic_link.payout_link;
|
let default_config = &state.conf.generic_link.payout_link.clone();
|
||||||
let default_ui_config = default_config.ui_config.clone();
|
let default_ui_config = default_config.ui_config.clone();
|
||||||
let ui_config_data = link_utils::GenericLinkUiConfigFormData {
|
let ui_config_data = link_utils::GenericLinkUiConfigFormData {
|
||||||
merchant_name: link_data
|
merchant_name: link_data
|
||||||
@ -126,7 +127,7 @@ pub async fn initiate_payout_link(
|
|||||||
format!("customer [{}] not found", payout_link.primary_reference)
|
format!("customer [{}] not found", payout_link.primary_reference)
|
||||||
})?;
|
})?;
|
||||||
let enabled_payout_methods =
|
let enabled_payout_methods =
|
||||||
filter_payout_methods(db, &merchant_account, &key_store, &payout).await?;
|
filter_payout_methods(&state, &merchant_account, &key_store, &payout).await?;
|
||||||
// Fetch default enabled_payout_methods
|
// Fetch default enabled_payout_methods
|
||||||
let mut default_enabled_payout_methods: Vec<link_utils::EnabledPaymentMethod> = vec![];
|
let mut default_enabled_payout_methods: Vec<link_utils::EnabledPaymentMethod> = vec![];
|
||||||
for (payment_method, payment_method_types) in
|
for (payment_method, payment_method_types) in
|
||||||
@ -148,7 +149,6 @@ pub async fn initiate_payout_link(
|
|||||||
let enabled_payment_methods = link_data
|
let enabled_payment_methods = link_data
|
||||||
.enabled_payment_methods
|
.enabled_payment_methods
|
||||||
.unwrap_or(fallback_enabled_payout_methods.to_vec());
|
.unwrap_or(fallback_enabled_payout_methods.to_vec());
|
||||||
|
|
||||||
let js_data = payouts::PayoutLinkDetails {
|
let js_data = payouts::PayoutLinkDetails {
|
||||||
publishable_key: masking::Secret::new(merchant_account.publishable_key),
|
publishable_key: masking::Secret::new(merchant_account.publishable_key),
|
||||||
client_secret: link_data.client_secret.clone(),
|
client_secret: link_data.client_secret.clone(),
|
||||||
@ -233,11 +233,12 @@ pub async fn initiate_payout_link(
|
|||||||
|
|
||||||
#[cfg(feature = "payouts")]
|
#[cfg(feature = "payouts")]
|
||||||
pub async fn filter_payout_methods(
|
pub async fn filter_payout_methods(
|
||||||
db: &dyn StorageInterface,
|
state: &SessionState,
|
||||||
merchant_account: &domain::MerchantAccount,
|
merchant_account: &domain::MerchantAccount,
|
||||||
key_store: &domain::MerchantKeyStore,
|
key_store: &domain::MerchantKeyStore,
|
||||||
payout: &hyperswitch_domain_models::payouts::payouts::Payouts,
|
payout: &hyperswitch_domain_models::payouts::payouts::Payouts,
|
||||||
) -> errors::RouterResult<Vec<link_utils::EnabledPaymentMethod>> {
|
) -> errors::RouterResult<Vec<link_utils::EnabledPaymentMethod>> {
|
||||||
|
let db: &dyn StorageInterface = &*state.store;
|
||||||
//Fetch all merchant connector accounts
|
//Fetch all merchant connector accounts
|
||||||
let all_mcas = db
|
let all_mcas = db
|
||||||
.find_merchant_connector_account_by_merchant_id_and_disabled_list(
|
.find_merchant_connector_account_by_merchant_id_and_disabled_list(
|
||||||
@ -255,40 +256,81 @@ pub async fn filter_payout_methods(
|
|||||||
filtered_mca_on_profile.clone(),
|
filtered_mca_on_profile.clone(),
|
||||||
common_enums::ConnectorType::PayoutProcessor,
|
common_enums::ConnectorType::PayoutProcessor,
|
||||||
);
|
);
|
||||||
|
let address = db
|
||||||
|
.find_address_by_address_id(&payout.address_id.clone(), key_store)
|
||||||
|
.await
|
||||||
|
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||||
|
.attach_printable_lazy(|| {
|
||||||
|
format!(
|
||||||
|
"Failed while fetching address with address id {}",
|
||||||
|
payout.address_id.clone()
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
|
||||||
let mut response: Vec<link_utils::EnabledPaymentMethod> = vec![];
|
let mut response: Vec<link_utils::EnabledPaymentMethod> = vec![];
|
||||||
let mut payment_method_list_hm: HashMap<
|
let mut payment_method_list_hm: HashMap<
|
||||||
common_enums::PaymentMethod,
|
common_enums::PaymentMethod,
|
||||||
HashSet<common_enums::PaymentMethodType>,
|
HashSet<common_enums::PaymentMethodType>,
|
||||||
> = HashMap::new();
|
> = HashMap::new();
|
||||||
let mut bank_transfer_hs: HashSet<common_enums::PaymentMethodType> = HashSet::new();
|
let mut bank_transfer_hash_set: HashSet<common_enums::PaymentMethodType> = HashSet::new();
|
||||||
let mut card_hs: HashSet<common_enums::PaymentMethodType> = HashSet::new();
|
let mut card_hash_set: HashSet<common_enums::PaymentMethodType> = HashSet::new();
|
||||||
let mut wallet_hs: HashSet<common_enums::PaymentMethodType> = HashSet::new();
|
let mut wallet_hash_set: HashSet<common_enums::PaymentMethodType> = HashSet::new();
|
||||||
|
let payout_filter_config = &state.conf.payout_method_filters.clone();
|
||||||
for mca in &filtered_mca {
|
for mca in &filtered_mca {
|
||||||
let payment_methods = match &mca.payment_methods_enabled {
|
let payout_methods = match &mca.payment_methods_enabled {
|
||||||
Some(pm) => pm,
|
Some(pm) => pm,
|
||||||
None => continue,
|
None => continue,
|
||||||
};
|
};
|
||||||
for payment_method in payment_methods.iter() {
|
for payout_method in payout_methods.iter() {
|
||||||
let parse_result = serde_json::from_value::<api_models::admin::PaymentMethodsEnabled>(
|
let parse_result = serde_json::from_value::<api_models::admin::PaymentMethodsEnabled>(
|
||||||
payment_method.clone(),
|
payout_method.clone(),
|
||||||
);
|
);
|
||||||
if let Ok(payment_methods_enabled) = parse_result {
|
if let Ok(payment_methods_enabled) = parse_result {
|
||||||
let payment_method = payment_methods_enabled.payment_method;
|
let payment_method = payment_methods_enabled.payment_method;
|
||||||
let payment_method_types = match payment_methods_enabled.payment_method_types {
|
let payment_method_types = match payment_methods_enabled.payment_method_types {
|
||||||
Some(pmt) => pmt,
|
Some(payment_method_types) => payment_method_types,
|
||||||
None => continue,
|
None => continue,
|
||||||
};
|
};
|
||||||
for pmts in &payment_method_types {
|
let connector = mca.connector_name.clone();
|
||||||
if payment_method == common_enums::PaymentMethod::Card {
|
let payout_filter = payout_filter_config.0.get(&connector);
|
||||||
card_hs.insert(pmts.payment_method_type);
|
for request_payout_method_type in &payment_method_types {
|
||||||
payment_method_list_hm.insert(payment_method, card_hs.clone());
|
let currency_country_filter = check_currency_country_filters(
|
||||||
} else if payment_method == common_enums::PaymentMethod::Wallet {
|
payout_filter,
|
||||||
wallet_hs.insert(pmts.payment_method_type);
|
request_payout_method_type,
|
||||||
payment_method_list_hm.insert(payment_method, wallet_hs.clone());
|
&payout.destination_currency,
|
||||||
} else if payment_method == common_enums::PaymentMethod::BankTransfer {
|
&address.country,
|
||||||
bank_transfer_hs.insert(pmts.payment_method_type);
|
)?;
|
||||||
payment_method_list_hm.insert(payment_method, bank_transfer_hs.clone());
|
if currency_country_filter.unwrap_or(true) {
|
||||||
|
match payment_method {
|
||||||
|
common_enums::PaymentMethod::Card => {
|
||||||
|
card_hash_set
|
||||||
|
.insert(request_payout_method_type.payment_method_type);
|
||||||
|
payment_method_list_hm
|
||||||
|
.insert(payment_method, card_hash_set.clone());
|
||||||
|
}
|
||||||
|
common_enums::PaymentMethod::Wallet => {
|
||||||
|
wallet_hash_set
|
||||||
|
.insert(request_payout_method_type.payment_method_type);
|
||||||
|
payment_method_list_hm
|
||||||
|
.insert(payment_method, wallet_hash_set.clone());
|
||||||
|
}
|
||||||
|
common_enums::PaymentMethod::BankTransfer => {
|
||||||
|
bank_transfer_hash_set
|
||||||
|
.insert(request_payout_method_type.payment_method_type);
|
||||||
|
payment_method_list_hm
|
||||||
|
.insert(payment_method, bank_transfer_hash_set.clone());
|
||||||
|
}
|
||||||
|
common_enums::PaymentMethod::CardRedirect
|
||||||
|
| common_enums::PaymentMethod::PayLater
|
||||||
|
| common_enums::PaymentMethod::BankRedirect
|
||||||
|
| common_enums::PaymentMethod::Crypto
|
||||||
|
| common_enums::PaymentMethod::BankDebit
|
||||||
|
| common_enums::PaymentMethod::Reward
|
||||||
|
| common_enums::PaymentMethod::RealTimePayment
|
||||||
|
| common_enums::PaymentMethod::Upi
|
||||||
|
| common_enums::PaymentMethod::Voucher
|
||||||
|
| common_enums::PaymentMethod::GiftCard => continue,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -305,3 +347,41 @@ pub async fn filter_payout_methods(
|
|||||||
}
|
}
|
||||||
Ok(response)
|
Ok(response)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn check_currency_country_filters(
|
||||||
|
payout_method_filter: Option<&PaymentMethodFilters>,
|
||||||
|
request_payout_method_type: &api_models::payment_methods::RequestPaymentMethodTypes,
|
||||||
|
currency: &common_enums::Currency,
|
||||||
|
country: &Option<common_enums::CountryAlpha2>,
|
||||||
|
) -> errors::RouterResult<Option<bool>> {
|
||||||
|
if matches!(
|
||||||
|
request_payout_method_type.payment_method_type,
|
||||||
|
common_enums::PaymentMethodType::Credit | common_enums::PaymentMethodType::Debit
|
||||||
|
) {
|
||||||
|
Ok(Some(true))
|
||||||
|
} else {
|
||||||
|
let payout_method_type_filter =
|
||||||
|
payout_method_filter.and_then(|payout_method_filter: &PaymentMethodFilters| {
|
||||||
|
payout_method_filter
|
||||||
|
.0
|
||||||
|
.get(&PaymentMethodFilterKey::PaymentMethodType(
|
||||||
|
request_payout_method_type.payment_method_type,
|
||||||
|
))
|
||||||
|
});
|
||||||
|
let country_filter = country.as_ref().and_then(|country| {
|
||||||
|
payout_method_type_filter.and_then(|currency_country_filter| {
|
||||||
|
currency_country_filter
|
||||||
|
.country
|
||||||
|
.as_ref()
|
||||||
|
.map(|country_hash_set| country_hash_set.contains(country))
|
||||||
|
})
|
||||||
|
});
|
||||||
|
let currency_filter = payout_method_type_filter.and_then(|currency_country_filter| {
|
||||||
|
currency_country_filter
|
||||||
|
.currency
|
||||||
|
.as_ref()
|
||||||
|
.map(|currency_hash_set| currency_hash_set.contains(currency))
|
||||||
|
});
|
||||||
|
Ok(currency_filter.or(country_filter))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user