    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "payouts")]
macro_rules! default_imp_for_new_connector_integration_payouts_quote {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl PayoutQuoteV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            PoQuote,
            PayoutFlowData,
            PayoutsData,
            PayoutsResponseData,
        > for $path::$connector
        {}
    )*
    };
}

#[cfg(feature = "payouts")]
default_imp_for_new_connector_integration_payouts_quote!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "payouts")]
macro_rules! default_imp_for_new_connector_integration_payouts_recipient {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl PayoutRecipientV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            PoRecipient,
            PayoutFlowData,
            PayoutsData,
            PayoutsResponseData,
        > for $path::$connector
        {}
    )*
    };
}

#[cfg(feature = "payouts")]
default_imp_for_new_connector_integration_payouts_recipient!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "payouts")]
macro_rules! default_imp_for_new_connector_integration_payouts_sync {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl PayoutSyncV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            PoSync,
            PayoutFlowData,
            PayoutsData,
            PayoutsResponseData,
        > for $path::$connector
        {}
    )*
    };
}

#[cfg(feature = "payouts")]
default_imp_for_new_connector_integration_payouts_sync!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "payouts")]
macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl PayoutRecipientAccountV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            PoRecipientAccount,
            PayoutFlowData,
            PayoutsData,
            PayoutsResponseData,
        > for $path::$connector
        {}
    )*
    };
}

#[cfg(feature = "payouts")]
default_imp_for_new_connector_integration_payouts_recipient_account!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

macro_rules! default_imp_for_new_connector_integration_webhook_source_verification {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl ConnectorVerifyWebhookSourceV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            VerifyWebhookSource,
            WebhookSourceVerifyData,
            VerifyWebhookSourceRequestData,
            VerifyWebhookSourceResponseData,
        > for $path::$connector
        {}
    )*
    };
}

default_imp_for_new_connector_integration_webhook_source_verification!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "frm")]
macro_rules! default_imp_for_new_connector_integration_frm_sale {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl FraudCheckSaleV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            Sale,
            FrmFlowData,
            FraudCheckSaleData,
            FraudCheckResponseData,
        > for $path::$connector
        {}
    )*
    };
}

#[cfg(feature = "frm")]
default_imp_for_new_connector_integration_frm_sale!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "frm")]
macro_rules! default_imp_for_new_connector_integration_frm_checkout {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl FraudCheckCheckoutV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            Checkout,
            FrmFlowData,
            FraudCheckCheckoutData,
            FraudCheckResponseData,
        > for $path::$connector
        {}
    )*
    };
}

#[cfg(feature = "frm")]
default_imp_for_new_connector_integration_frm_checkout!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "frm")]
macro_rules! default_imp_for_new_connector_integration_frm_transaction {
    ($($path:ident::$connector:ident),*) => {
        $(
            impl FraudCheckTransactionV2 for $path::$connector {}
            impl
            ConnectorIntegrationV2<
            Transaction,
            FrmFlowData,
            FraudCheckTransactionData,
            FraudCheckResponseData,
        > for $path::$connector
        {}
    )*
    };
}

#[cfg(feature = "frm")]
default_imp_for_new_connector_integration_frm_transaction!(
    connectors::Vgs,
    connectors::Aci,
    connectors::Adyen,
    connectors::Adyenplatform,
    connectors::Affirm,
    connectors::Airwallex,
    connectors::Amazonpay,
    connectors::Authipay,
    connectors::Authorizedotnet,
    connectors::Bambora,
    connectors::Bamboraapac,
    connectors::Bankofamerica,
    connectors::Barclaycard,
    connectors::Billwerk,
    connectors::Bitpay,
    connectors::Blackhawknetwork,
    connectors::Bluecode,
    connectors::Bluesnap,
    connectors::Braintree,
    connectors::Boku,
    connectors::Breadpay,
    connectors::Cashtocode,
    connectors::Celero,
    connectors::Chargebee,
    connectors::Checkbook,
    connectors::Checkout,
    connectors::Coinbase,
    connectors::Coingate,
    connectors::Cryptopay,
    connectors::CtpMastercard,
    connectors::Custombilling,
    connectors::Cybersource,
    connectors::Datatrans,
    connectors::Deutschebank,
    connectors::Digitalvirgo,
    connectors::Dlocal,
    connectors::Dwolla,
    connectors::Ebanx,
    connectors::Elavon,
    connectors::Facilitapay,
    connectors::Finix,
    connectors::Fiserv,
    connectors::Fiservemea,
    connectors::Fiuu,
    connectors::Flexiti,
    connectors::Forte,
    connectors::Getnet,
    connectors::Gigadat,
    connectors::Globalpay,
    connectors::Globepay,
    connectors::Gocardless,
    connectors::Gpayments,
    connectors::Hipay,
    connectors::Helcim,
    connectors::HyperswitchVault,
    connectors::Hyperwallet,
    connectors::Iatapay,
    connectors::Inespay,
    connectors::Itaubank,
    connectors::Jpmorgan,
    connectors::Juspaythreedsserver,
    connectors::Katapult,
    connectors::Klarna,
    connectors::Loonio,
    connectors::Nomupay,
    connectors::Noon,
    connectors::Nordea,
    connectors::Novalnet,
    connectors::Netcetera,
    connectors::Nexinets,
    connectors::Nexixpay,
    connectors::Nmi,
    connectors::Payone,
    connectors::Opayo,
    connectors::Opennode,
    connectors::Nuvei,
    connectors::Paybox,
    connectors::Payeezy,
    connectors::Payload,
    connectors::Payme,
    connectors::Paypal,
    connectors::Paysafe,
    connectors::Paystack,
    connectors::Paytm,
    connectors::Payu,
    connectors::Peachpayments,
    connectors::Phonepe,
    connectors::Placetopay,
    connectors::Plaid,
    connectors::Powertranz,
    connectors::Prophetpay,
    connectors::Mifinity,
    connectors::Mollie,
    connectors::Moneris,
    connectors::Mpgs,
    connectors::Multisafepay,
    connectors::Rapyd,
    connectors::Razorpay,
    connectors::Recurly,
    connectors::Redsys,
    connectors::Riskified,
    connectors::Santander,
    connectors::Shift4,
    connectors::Sift,
    connectors::Silverflow,
    connectors::Signifyd,
    connectors::Stax,
    connectors::Stripe,
    connectors::Square,
    connectors::Stripebilling,
    connectors::Taxjar,
    connectors::Tesouro,
    connectors::Threedsecureio,
    connectors::Thunes,
    connectors::Tokenex,
    connectors::Tokenio,
    connectors::Trustpay,
    connectors::Trustpayments,
    connectors::Tsys,
    connectors::UnifiedAuthenticationService,
    connectors::Wise,
    connectors::Worldline,
    connectors::Volt,
    connectors::Worldpay,
    connectors::Worldpayvantiv,
    connectors::Worldpayxml,
    connectors::Wellsfargo,
    connectors::Wellsfargopayout,
    connectors::Xendit,
    connectors::Zen,
    connectors::Zsl
);

#[cfg(feature = "frm")]
macro_rules! default_imp_for_new_connector_integration_frm_fulfillment {


// Implementation: impl api::Refund for for Checkbook
// File: crates/hyperswitch_connectors/src/connectors/checkbook.rs
// Module: hyperswitch_connectors
// Methods: 0 total (0 public)

impl api::Refund for for Checkbook


// Implementation: impl api::Refund for for Deutschebank
// File: crates/hyperswitch_connectors/src/connectors/deutschebank.rs
// Module: hyperswitch_connectors
// Methods: 0 total (0 public)

impl api::Refund for for Deutschebank


// Implementation: impl Default for for DrainerSettings
// File: crates/scheduler/src/settings.rs
// Module: scheduler
// Methods: 1 total (0 public)

impl Default for for DrainerSettings


// File: crates/analytics/src/disputes/core.rs
// Module: analytics
// Public functions: 2

use std::collections::HashMap;

use api_models::analytics::{
    disputes::{
        DisputeDimensions, DisputeMetrics, DisputeMetricsBucketIdentifier,
        DisputeMetricsBucketResponse,
    },
    DisputeFilterValue, DisputeFiltersResponse, DisputesAnalyticsMetadata, DisputesMetricsResponse,
    GetDisputeFilterRequest, GetDisputeMetricRequest,
};
use error_stack::ResultExt;
use router_env::{
    logger,
    tracing::{self, Instrument},
};

use super::{
    filters::{get_dispute_filter_for_dimension, DisputeFilterRow},
    DisputeMetricsAccumulator,
};
use crate::{
    disputes::DisputeMetricAccumulator,
    enums::AuthInfo,
    errors::{AnalyticsError, AnalyticsResult},
    metrics, AnalyticsProvider,
};

pub async fn get_metrics(
    pool: &AnalyticsProvider,
    auth: &AuthInfo,
    req: GetDisputeMetricRequest,
) -> AnalyticsResult<DisputesMetricsResponse<DisputeMetricsBucketResponse>> {
    let mut metrics_accumulator: HashMap<
        DisputeMetricsBucketIdentifier,
        DisputeMetricsAccumulator,
    > = HashMap::new();
    let mut set = tokio::task::JoinSet::new();
    for metric_type in req.metrics.iter().cloned() {
        let req = req.clone();
        let pool = pool.clone();
        let task_span = tracing::debug_span!(
            "analytics_dispute_query",
            refund_metric = metric_type.as_ref()
        );
        // Currently JoinSet works with only static lifetime references even if the task pool does not outlive the given reference
        // We can optimize away this clone once that is fixed
        let auth_scoped = auth.to_owned();
        set.spawn(
            async move {
                let data = pool
                    .get_dispute_metrics(
                        &metric_type,
                        &req.group_by_names.clone(),
                        &auth_scoped,
                        &req.filters,
                        req.time_series.map(|t| t.granularity),
                        &req.time_range,
                    )
                    .await
                    .change_context(AnalyticsError::UnknownError);
                (metric_type, data)
            }
            .instrument(task_span),
        );
    }

    while let Some((metric, data)) = set
        .join_next()
        .await
        .transpose()
        .change_context(AnalyticsError::UnknownError)?
    {
        let data = data?;
        let attributes = router_env::metric_attributes!(
            ("metric_type", metric.to_string()),
            ("source", pool.to_string()),
        );

        let value = u64::try_from(data.len());
        if let Ok(val) = value {
            metrics::BUCKETS_FETCHED.record(val, attributes);
            logger::debug!("Attributes: {:?}, Buckets fetched: {}", attributes, val);
        }

        for (id, value) in data {
            logger::debug!(bucket_id=?id, bucket_value=?value, "Bucket row for metric {metric}");
            let metrics_builder = metrics_accumulator.entry(id).or_default();
            match metric {
                DisputeMetrics::DisputeStatusMetric
                | DisputeMetrics::SessionizedDisputeStatusMetric => metrics_builder
                    .disputes_status_rate
                    .add_metrics_bucket(&value),
                DisputeMetrics::TotalAmountDisputed
                | DisputeMetrics::SessionizedTotalAmountDisputed => {
                    metrics_builder.disputed_amount.add_metrics_bucket(&value)
                }
                DisputeMetrics::TotalDisputeLostAmount
                | DisputeMetrics::SessionizedTotalDisputeLostAmount => metrics_builder
                    .dispute_lost_amount
                    .add_metrics_bucket(&value),
            }
        }

        logger::debug!(
            "Analytics Accumulated Results: metric: {}, results: {:#?}",
            metric,
            metrics_accumulator
        );
    }
    let mut total_disputed_amount = 0;
    let mut total_dispute_lost_amount = 0;
    let query_data: Vec<DisputeMetricsBucketResponse> = metrics_accumulator
        .into_iter()
        .map(|(id, val)| {
            let collected_values = val.collect();
            if let Some(amount) = collected_values.disputed_amount {
                total_disputed_amount += amount;
            }
            if let Some(amount) = collected_values.dispute_lost_amount {
                total_dispute_lost_amount += amount;
            }

            DisputeMetricsBucketResponse {
                values: collected_values,
                dimensions: id,
            }
        })
        .collect();

    Ok(DisputesMetricsResponse {
        query_data,
        meta_data: [DisputesAnalyticsMetadata {
            total_disputed_amount: Some(total_disputed_amount),
            total_dispute_lost_amount: Some(total_dispute_lost_amount),
        }],
    })
}

pub async fn get_filters(
    pool: &AnalyticsProvider,
    req: GetDisputeFilterRequest,
    auth: &AuthInfo,
) -> AnalyticsResult<DisputeFiltersResponse> {
    let mut res = DisputeFiltersResponse::default();
    for dim in req.group_by_names {
        let values = match pool {
                        AnalyticsProvider::Sqlx(pool) => {
                            get_dispute_filter_for_dimension(dim, auth, &req.time_range, pool)
                    .await
            }
                        AnalyticsProvider::Clickhouse(pool) => {
                            get_dispute_filter_for_dimension(dim, auth, &req.time_range, pool)
                    .await
            }
                    AnalyticsProvider::CombinedCkh(sqlx_pool, ckh_pool) => {
                let ckh_result = get_dispute_filter_for_dimension(
                    dim,
                    auth,
                    &req.time_range,
                    ckh_pool,
                )
                .await;
                let sqlx_result = get_dispute_filter_for_dimension(
                    dim,
                    auth,
                    &req.time_range,
                    sqlx_pool,
                )
                .await;
                match (&sqlx_result, &ckh_result) {
                    (Ok(ref sqlx_res), Ok(ref ckh_res)) if sqlx_res != ckh_res => {
                        router_env::logger::error!(clickhouse_result=?ckh_res, postgres_result=?sqlx_res, "Mismatch between clickhouse & postgres disputes analytics filters")
                    },
                    _ => {}
                };
                ckh_result
            }
                    AnalyticsProvider::CombinedSqlx(sqlx_pool, ckh_pool) => {
                let ckh_result = get_dispute_filter_for_dimension(
                    dim,
                    auth,
                    &req.time_range,
                    ckh_pool,
                )
                .await;
                let sqlx_result = get_dispute_filter_for_dimension(
                    dim,
                    auth,
                    &req.time_range,
                    sqlx_pool,
                )
                .await;
                match (&sqlx_result, &ckh_result) {
                    (Ok(ref sqlx_res), Ok(ref ckh_res)) if sqlx_res != ckh_res => {
                        router_env::logger::error!(clickhouse_result=?ckh_res, postgres_result=?sqlx_res, "Mismatch between clickhouse & postgres disputes analytics filters")
                    },
                    _ => {}
                };
                sqlx_result
            }
        }
        .change_context(AnalyticsError::UnknownError)?
        .into_iter()
        .filter_map(|fil: DisputeFilterRow| match dim {
            DisputeDimensions::DisputeStage => fil.dispute_stage,
            DisputeDimensions::Connector => fil.connector,
            DisputeDimensions::Currency => fil.currency.map(|i| i.as_ref().to_string()),
        })
        .collect::<Vec<String>>();
        res.query_data.push(DisputeFilterValue {
            dimension: dim,
            values,
        })
    }
    Ok(res)
}


// Implementation: impl DrainerSettings
// File: crates/drainer/src/settings.rs
// Module: drainer
// Methods: 1 total (0 public)

impl DrainerSettings


// Struct: ThreeDsResponseData
// File: crates/hyperswitch_connectors/src/connectors/unified_authentication_service/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct ThreeDsResponseData


// Struct: Initiator
// File: crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct Initiator


// File: crates/diesel_models/src/dispute.rs
// Module: diesel_models
// Public structs: 3

use common_utils::{
    custom_serde,
    types::{MinorUnit, StringMinorUnit},
};
use diesel::{AsChangeset, Identifiable, Insertable, Queryable, Selectable};
use masking::Secret;
use serde::Serialize;
use time::PrimitiveDateTime;

use crate::{enums as storage_enums, schema::dispute};

#[derive(Clone, Debug, Insertable, Serialize, router_derive::DebugAsDisplay)]
#[diesel(table_name = dispute)]
#[serde(deny_unknown_fields)]
pub struct DisputeNew {
    pub dispute_id: String,
    pub amount: StringMinorUnit,
    pub currency: String,
    pub dispute_stage: storage_enums::DisputeStage,
    pub dispute_status: storage_enums::DisputeStatus,
    pub payment_id: common_utils::id_type::PaymentId,
    pub attempt_id: String,
    pub merchant_id: common_utils::id_type::MerchantId,
    pub connector_status: String,
    pub connector_dispute_id: String,
    pub connector_reason: Option<String>,
    pub connector_reason_code: Option<String>,
    pub challenge_required_by: Option<PrimitiveDateTime>,
    pub connector_created_at: Option<PrimitiveDateTime>,
    pub connector_updated_at: Option<PrimitiveDateTime>,
    pub connector: String,
    pub evidence: Option<Secret<serde_json::Value>>,
    pub profile_id: Option<common_utils::id_type::ProfileId>,
    pub merchant_connector_id: Option<common_utils::id_type::MerchantConnectorAccountId>,
    pub dispute_amount: MinorUnit,
    pub organization_id: common_utils::id_type::OrganizationId,
    pub dispute_currency: Option<storage_enums::Currency>,
}

#[derive(Clone, Debug, PartialEq, Serialize, Identifiable, Queryable, Selectable)]
#[diesel(table_name = dispute, primary_key(dispute_id), check_for_backend(diesel::pg::Pg))]
pub struct Dispute {
    pub dispute_id: String,
    pub amount: StringMinorUnit,
    pub currency: String,
    pub dispute_stage: storage_enums::DisputeStage,
    pub dispute_status: storage_enums::DisputeStatus,
    pub payment_id: common_utils::id_type::PaymentId,
    pub attempt_id: String,
    pub merchant_id: common_utils::id_type::MerchantId,
    pub connector_status: String,
    pub connector_dispute_id: String,
    pub connector_reason: Option<String>,
    pub connector_reason_code: Option<String>,
    pub challenge_required_by: Option<PrimitiveDateTime>,
    pub connector_created_at: Option<PrimitiveDateTime>,
    pub connector_updated_at: Option<PrimitiveDateTime>,
    #[serde(with = "custom_serde::iso8601")]
    pub created_at: PrimitiveDateTime,
    #[serde(with = "custom_serde::iso8601")]
    pub modified_at: PrimitiveDateTime,
    pub connector: String,
    pub evidence: Secret<serde_json::Value>,
    pub profile_id: Option<common_utils::id_type::ProfileId>,
    pub merchant_connector_id: Option<common_utils::id_type::MerchantConnectorAccountId>,
    pub dispute_amount: MinorUnit,
    pub organization_id: common_utils::id_type::OrganizationId,
    pub dispute_currency: Option<storage_enums::Currency>,
}

#[derive(Debug)]
pub enum DisputeUpdate {
    Update {
        dispute_stage: storage_enums::DisputeStage,
        dispute_status: storage_enums::DisputeStatus,
        connector_status: String,
        connector_reason: Option<String>,
        connector_reason_code: Option<String>,
        challenge_required_by: Option<PrimitiveDateTime>,
        connector_updated_at: Option<PrimitiveDateTime>,
    },
    StatusUpdate {
        dispute_status: storage_enums::DisputeStatus,
        connector_status: Option<String>,
    },
    EvidenceUpdate {
        evidence: Secret<serde_json::Value>,
    },
}

#[derive(Clone, Debug, AsChangeset, router_derive::DebugAsDisplay)]
#[diesel(table_name = dispute)]
pub struct DisputeUpdateInternal {
    dispute_stage: Option<storage_enums::DisputeStage>,
    dispute_status: Option<storage_enums::DisputeStatus>,
    connector_status: Option<String>,
    connector_reason: Option<String>,
    connector_reason_code: Option<String>,
    challenge_required_by: Option<PrimitiveDateTime>,
    connector_updated_at: Option<PrimitiveDateTime>,
    modified_at: PrimitiveDateTime,
    evidence: Option<Secret<serde_json::Value>>,
}

impl From<DisputeUpdate> for DisputeUpdateInternal {
    fn from(merchant_account_update: DisputeUpdate) -> Self {
        match merchant_account_update {
            DisputeUpdate::Update {
                dispute_stage,
                dispute_status,
                connector_status,
                connector_reason,
                connector_reason_code,
                challenge_required_by,
                connector_updated_at,
            } => Self {
                dispute_stage: Some(dispute_stage),
                dispute_status: Some(dispute_status),
                connector_status: Some(connector_status),
                connector_reason,
                connector_reason_code,
                challenge_required_by,
                connector_updated_at,
                modified_at: common_utils::date_time::now(),
                evidence: None,
            },
            DisputeUpdate::StatusUpdate {
                dispute_status,
                connector_status,
            } => Self {
                dispute_status: Some(dispute_status),
                connector_status,
                modified_at: common_utils::date_time::now(),
                dispute_stage: None,
                connector_reason: None,
                connector_reason_code: None,
                challenge_required_by: None,
                connector_updated_at: None,
                evidence: None,
            },
            DisputeUpdate::EvidenceUpdate { evidence } => Self {
                evidence: Some(evidence),
                dispute_stage: None,
                dispute_status: None,
                connector_status: None,
                connector_reason: None,
                connector_reason_code: None,
                challenge_required_by: None,
                connector_updated_at: None,
                modified_at: common_utils::date_time::now(),
            },
        }
    }
}


// Function: from_string
// File: crates/common_utils/src/id_type/global_id/token.rs
// Module: common_utils

// Documentation: Get GlobalTokenId from a string

pub fn from_string(token_string: &str) -> CustomResult<Self, ValidationError>


// Struct: ConnectorParams
// File: crates/hyperswitch_domain_models/src/connector_endpoints.rs
// Module: hyperswitch_domain_models
// Implementations: 0

pub struct ConnectorParams


// Struct: SantanderPixQRCodeRequest
// File: crates/hyperswitch_connectors/src/connectors/santander/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct SantanderPixQRCodeRequest


// Struct: MifinityPayload
// File: crates/hyperswitch_connectors/src/connectors/mifinity/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct MifinityPayload


// Struct: StripeSplitRefund
// File: crates/hyperswitch_domain_models/src/router_request_types.rs
// Module: hyperswitch_domain_models
// Implementations: 0

pub struct StripeSplitRefund


// Struct: AccessTokenRequestData
// File: crates/hyperswitch_domain_models/src/router_request_types.rs
// Module: hyperswitch_domain_models
// Implementations: 0

pub struct AccessTokenRequestData


// Struct: FraudMarkingInformation
// File: crates/hyperswitch_connectors/src/connectors/bankofamerica/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct FraudMarkingInformation


// Struct: AuthorizedotnetRefundResponse
// File: crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct AuthorizedotnetRefundResponse


// Function: server
// File: crates/router/src/routes/app.rs
// Module: router

pub fn server(config: AppState) -> Scope


// Function: get_masked_bank_details
// File: crates/router/src/core/payment_methods/cards.rs
// Module: router

pub fn get_masked_bank_details(
    pm: &domain::PaymentMethod,
) -> errors::RouterResult<Option<MaskedBankDetails>>


// Struct: OpenIdConnectPublicConfig
// File: crates/api_models/src/user.rs
// Module: api_models
// Implementations: 0

pub struct OpenIdConnectPublicConfig


// Implementation: impl api::PaymentVoid for for Payload
// File: crates/hyperswitch_connectors/src/connectors/payload.rs
// Module: hyperswitch_connectors
// Methods: 0 total (0 public)

impl api::PaymentVoid for for Payload


// Struct: PlacetopayPayment
// File: crates/hyperswitch_connectors/src/connectors/placetopay/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct PlacetopayPayment


// Implementation: impl opentelemetry_sdk::trace::ShouldSample for for ConditionalSampler
// File: crates/router_env/src/logger/setup.rs
// Module: router_env
// Methods: 1 total (0 public)

impl opentelemetry_sdk::trace::ShouldSample for for ConditionalSampler


// Struct: CheckoutMeta
// File: crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct CheckoutMeta


// File: crates/hyperswitch_interfaces/src/lib.rs
// Module: hyperswitch_interfaces

//! Hyperswitch interface
#![warn(missing_docs, missing_debug_implementations)]

pub mod api;
pub mod authentication;
/// Configuration related functionalities
pub mod configs;
/// Connector integration interface module
pub mod connector_integration_interface;
/// definition of the new connector integration trait
pub mod connector_integration_v2;
/// Constants used throughout the application
pub mod consts;
/// Conversion implementations
pub mod conversion_impls;
pub mod disputes;
pub mod encryption_interface;
pub mod errors;
pub mod events;
/// connector integrity check interface
pub mod integrity;
pub mod metrics;
pub mod secrets_interface;
pub mod types;
pub mod webhooks;

/// Crm interface
pub mod crm;


// Function: sync_merchant_onboarding_status
// File: crates/router/src/core/connector_onboarding/paypal.rs
// Module: router

pub fn sync_merchant_onboarding_status(
    state: SessionState,
    tracking_id: String,
) -> RouterResult<api::OnboardingStatus>


// Function: get_hash_key_for_kv_store
// File: crates/common_utils/src/id_type/payment.rs
// Module: common_utils

// Documentation: Get the hash key to be stored in redis

pub fn get_hash_key_for_kv_store(&self) -> String


// File: crates/kgraph_utils/src/transformers.rs
// Module: kgraph_utils
// Public functions: 3

use api_models::enums as api_enums;
use euclid::{
    backend::BackendInput,
    dirval,
    dssa::types::AnalysisErrorType,
    frontend::{ast, dir},
    types::{NumValue, StrValue},
};

use crate::error::KgraphError;

pub trait IntoContext {
    fn into_context(self) -> Result<Vec<dir::DirValue>, KgraphError>;
}

impl IntoContext for BackendInput {
    fn into_context(self) -> Result<Vec<dir::DirValue>, KgraphError> {
        let mut ctx: Vec<dir::DirValue> = Vec::new();

        ctx.push(dir::DirValue::PaymentAmount(NumValue {
            number: self.payment.amount,
            refinement: None,
        }));

        ctx.push(dir::DirValue::PaymentCurrency(self.payment.currency));

        if let Some(auth_type) = self.payment.authentication_type {
            ctx.push(dir::DirValue::AuthenticationType(auth_type));
        }

        if let Some(capture_method) = self.payment.capture_method {
            ctx.push(dir::DirValue::CaptureMethod(capture_method));
        }

        if let Some(business_country) = self.payment.business_country {
            ctx.push(dir::DirValue::BusinessCountry(business_country));
        }
        if let Some(business_label) = self.payment.business_label {
            ctx.push(dir::DirValue::BusinessLabel(StrValue {
                value: business_label,
            }));
        }
        if let Some(billing_country) = self.payment.billing_country {
            ctx.push(dir::DirValue::BillingCountry(billing_country));
        }

        if let Some(payment_method) = self.payment_method.payment_method {
            ctx.push(dir::DirValue::PaymentMethod(payment_method));
        }

        if let (Some(pm_type), Some(payment_method)) = (
            self.payment_method.payment_method_type,
            self.payment_method.payment_method,
        ) {
            ctx.push((pm_type, payment_method).into_dir_value()?)
        }

        if let Some(card_network) = self.payment_method.card_network {
            ctx.push(dir::DirValue::CardNetwork(card_network));
        }
        if let Some(setup_future_usage) = self.payment.setup_future_usage {
            ctx.push(dir::DirValue::SetupFutureUsage(setup_future_usage));
        }
        if let Some(mandate_acceptance_type) = self.mandate.mandate_acceptance_type {
            ctx.push(dir::DirValue::MandateAcceptanceType(
                mandate_acceptance_type,
            ));
        }
        if let Some(mandate_type) = self.mandate.mandate_type {
            ctx.push(dir::DirValue::MandateType(mandate_type));
        }
        if let Some(payment_type) = self.mandate.payment_type {
            ctx.push(dir::DirValue::PaymentType(payment_type));
        }

        Ok(ctx)
    }
}

pub trait IntoDirValue {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError>;
}

impl IntoDirValue for ast::ConnectorChoice {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError> {
        Ok(dir::DirValue::Connector(Box::new(self)))
    }
}

impl IntoDirValue for api_enums::PaymentMethod {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError> {
        match self {
            Self::Card => Ok(dirval!(PaymentMethod = Card)),
            Self::Wallet => Ok(dirval!(PaymentMethod = Wallet)),
            Self::PayLater => Ok(dirval!(PaymentMethod = PayLater)),
            Self::BankRedirect => Ok(dirval!(PaymentMethod = BankRedirect)),
            Self::Crypto => Ok(dirval!(PaymentMethod = Crypto)),
            Self::BankDebit => Ok(dirval!(PaymentMethod = BankDebit)),
            Self::BankTransfer => Ok(dirval!(PaymentMethod = BankTransfer)),
            Self::Reward => Ok(dirval!(PaymentMethod = Reward)),
            Self::RealTimePayment => Ok(dirval!(PaymentMethod = RealTimePayment)),
            Self::Upi => Ok(dirval!(PaymentMethod = Upi)),
            Self::Voucher => Ok(dirval!(PaymentMethod = Voucher)),
            Self::GiftCard => Ok(dirval!(PaymentMethod = GiftCard)),
            Self::CardRedirect => Ok(dirval!(PaymentMethod = CardRedirect)),
            Self::OpenBanking => Ok(dirval!(PaymentMethod = OpenBanking)),
            Self::MobilePayment => Ok(dirval!(PaymentMethod = MobilePayment)),
        }
    }
}

impl IntoDirValue for api_enums::AuthenticationType {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError> {
        match self {
            Self::ThreeDs => Ok(dirval!(AuthenticationType = ThreeDs)),
            Self::NoThreeDs => Ok(dirval!(AuthenticationType = NoThreeDs)),
        }
    }
}

impl IntoDirValue for api_enums::FutureUsage {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError> {
        match self {
            Self::OnSession => Ok(dirval!(SetupFutureUsage = OnSession)),
            Self::OffSession => Ok(dirval!(SetupFutureUsage = OffSession)),
        }
    }
}

impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError> {
        match self.0 {
            api_enums::PaymentMethodType::AmazonPay => Ok(dirval!(WalletType = AmazonPay)),
            api_enums::PaymentMethodType::Paysera => Ok(dirval!(WalletType = Paysera)),
            api_enums::PaymentMethodType::Skrill => Ok(dirval!(WalletType = Skrill)),
            api_enums::PaymentMethodType::Credit => Ok(dirval!(CardType = Credit)),
            api_enums::PaymentMethodType::Debit => Ok(dirval!(CardType = Debit)),
            #[cfg(feature = "v2")]
            api_enums::PaymentMethodType::Card => Ok(dirval!(CardType = Card)),
            api_enums::PaymentMethodType::Giropay => Ok(dirval!(BankRedirectType = Giropay)),
            api_enums::PaymentMethodType::Ideal => Ok(dirval!(BankRedirectType = Ideal)),
            api_enums::PaymentMethodType::Sofort => Ok(dirval!(BankRedirectType = Sofort)),
            api_enums::PaymentMethodType::Eft => Ok(dirval!(BankRedirectType = Eft)),
            api_enums::PaymentMethodType::Eps => Ok(dirval!(BankRedirectType = Eps)),
            api_enums::PaymentMethodType::Klarna => Ok(dirval!(PayLaterType = Klarna)),
            api_enums::PaymentMethodType::Affirm => Ok(dirval!(PayLaterType = Affirm)),
            api_enums::PaymentMethodType::AfterpayClearpay => {
                Ok(dirval!(PayLaterType = AfterpayClearpay))
            }
            api_enums::PaymentMethodType::GooglePay => Ok(dirval!(WalletType = GooglePay)),
            api_enums::PaymentMethodType::Bluecode => Ok(dirval!(WalletType = Bluecode)),
            api_enums::PaymentMethodType::ApplePay => Ok(dirval!(WalletType = ApplePay)),
            api_enums::PaymentMethodType::Paypal => Ok(dirval!(WalletType = Paypal)),
            api_enums::PaymentMethodType::CryptoCurrency => {
                Ok(dirval!(CryptoType = CryptoCurrency))
            }
            api_enums::PaymentMethodType::RevolutPay => Ok(dirval!(WalletType = RevolutPay)),
            api_enums::PaymentMethodType::Ach => match self.1 {
                api_enums::PaymentMethod::BankDebit => Ok(dirval!(BankDebitType = Ach)),
                api_enums::PaymentMethod::BankTransfer => Ok(dirval!(BankTransferType = Ach)),
                api_enums::PaymentMethod::BankRedirect
                | api_enums::PaymentMethod::Card
                | api_enums::PaymentMethod::CardRedirect
                | api_enums::PaymentMethod::PayLater
                | api_enums::PaymentMethod::Wallet
                | api_enums::PaymentMethod::Crypto
                | api_enums::PaymentMethod::Reward
                | api_enums::PaymentMethod::RealTimePayment
                | api_enums::PaymentMethod::Upi
                | api_enums::PaymentMethod::MobilePayment
                | api_enums::PaymentMethod::Voucher
                | api_enums::PaymentMethod::OpenBanking
                | api_enums::PaymentMethod::GiftCard => Err(KgraphError::ContextConstructionError(
                    Box::new(AnalysisErrorType::NotSupported),
                )),
            },
            api_enums::PaymentMethodType::Bacs => match self.1 {
                api_enums::PaymentMethod::BankDebit => Ok(dirval!(BankDebitType = Bacs)),
                api_enums::PaymentMethod::BankTransfer => Ok(dirval!(BankTransferType = Bacs)),
                api_enums::PaymentMethod::BankRedirect
                | api_enums::PaymentMethod::Card
                | api_enums::PaymentMethod::CardRedirect
                | api_enums::PaymentMethod::PayLater
                | api_enums::PaymentMethod::Wallet
                | api_enums::PaymentMethod::Crypto
                | api_enums::PaymentMethod::Reward
                | api_enums::PaymentMethod::RealTimePayment
                | api_enums::PaymentMethod::Upi
                | api_enums::PaymentMethod::MobilePayment
                | api_enums::PaymentMethod::Voucher
                | api_enums::PaymentMethod::OpenBanking
                | api_enums::PaymentMethod::GiftCard => Err(KgraphError::ContextConstructionError(
                    Box::new(AnalysisErrorType::NotSupported),
                )),
            },
            api_enums::PaymentMethodType::Becs => Ok(dirval!(BankDebitType = Becs)),
            api_enums::PaymentMethodType::Sepa => Ok(dirval!(BankDebitType = Sepa)),
            api_enums::PaymentMethodType::SepaBankTransfer => {
                Ok(dirval!(BankTransferType = SepaBankTransfer))
            }
            api_enums::PaymentMethodType::AliPay => Ok(dirval!(WalletType = AliPay)),
            api_enums::PaymentMethodType::AliPayHk => Ok(dirval!(WalletType = AliPayHk)),
            api_enums::PaymentMethodType::BancontactCard => {
                Ok(dirval!(BankRedirectType = BancontactCard))
            }
            api_enums::PaymentMethodType::Blik => Ok(dirval!(BankRedirectType = Blik)),
            api_enums::PaymentMethodType::MbWay => Ok(dirval!(WalletType = MbWay)),
            api_enums::PaymentMethodType::MobilePay => Ok(dirval!(WalletType = MobilePay)),
            api_enums::PaymentMethodType::Cashapp => Ok(dirval!(WalletType = Cashapp)),
            api_enums::PaymentMethodType::Multibanco => Ok(dirval!(BankTransferType = Multibanco)),
            api_enums::PaymentMethodType::Pix => Ok(dirval!(BankTransferType = Pix)),
            api_enums::PaymentMethodType::Pse => Ok(dirval!(BankTransferType = Pse)),
            api_enums::PaymentMethodType::Interac => Ok(dirval!(BankRedirectType = Interac)),
            api_enums::PaymentMethodType::OnlineBankingCzechRepublic => {
                Ok(dirval!(BankRedirectType = OnlineBankingCzechRepublic))
            }
            api_enums::PaymentMethodType::OnlineBankingFinland => {
                Ok(dirval!(BankRedirectType = OnlineBankingFinland))
            }
            api_enums::PaymentMethodType::OnlineBankingPoland => {
                Ok(dirval!(BankRedirectType = OnlineBankingPoland))
            }
            api_enums::PaymentMethodType::OnlineBankingSlovakia => {
                Ok(dirval!(BankRedirectType = OnlineBankingSlovakia))
            }
            api_enums::PaymentMethodType::Swish => Ok(dirval!(WalletType = Swish)),
            api_enums::PaymentMethodType::Trustly => Ok(dirval!(BankRedirectType = Trustly)),
            api_enums::PaymentMethodType::Bizum => Ok(dirval!(BankRedirectType = Bizum)),
            api_enums::PaymentMethodType::PayBright => Ok(dirval!(PayLaterType = PayBright)),
            api_enums::PaymentMethodType::Flexiti => Ok(dirval!(PayLaterType = Flexiti)),
            api_enums::PaymentMethodType::Walley => Ok(dirval!(PayLaterType = Walley)),
            api_enums::PaymentMethodType::Breadpay => Ok(dirval!(PayLaterType = Breadpay)),
            api_enums::PaymentMethodType::Przelewy24 => Ok(dirval!(BankRedirectType = Przelewy24)),
            api_enums::PaymentMethodType::WeChatPay => Ok(dirval!(WalletType = WeChatPay)),
            api_enums::PaymentMethodType::ClassicReward => Ok(dirval!(RewardType = ClassicReward)),
            api_enums::PaymentMethodType::Evoucher => Ok(dirval!(RewardType = Evoucher)),
            api_enums::PaymentMethodType::UpiCollect => Ok(dirval!(UpiType = UpiCollect)),
            api_enums::PaymentMethodType::UpiIntent => Ok(dirval!(UpiType = UpiIntent)),
            api_enums::PaymentMethodType::SamsungPay => Ok(dirval!(WalletType = SamsungPay)),
            api_enums::PaymentMethodType::GoPay => Ok(dirval!(WalletType = GoPay)),
            api_enums::PaymentMethodType::KakaoPay => Ok(dirval!(WalletType = KakaoPay)),
            api_enums::PaymentMethodType::Twint => Ok(dirval!(WalletType = Twint)),
            api_enums::PaymentMethodType::Gcash => Ok(dirval!(WalletType = Gcash)),
            api_enums::PaymentMethodType::Vipps => Ok(dirval!(WalletType = Vipps)),
            api_enums::PaymentMethodType::Momo => Ok(dirval!(WalletType = Momo)),
            api_enums::PaymentMethodType::Alma => Ok(dirval!(PayLaterType = Alma)),
            api_enums::PaymentMethodType::Dana => Ok(dirval!(WalletType = Dana)),
            api_enums::PaymentMethodType::OnlineBankingFpx => {
                Ok(dirval!(BankRedirectType = OnlineBankingFpx))
            }
            api_enums::PaymentMethodType::LocalBankRedirect => {
                Ok(dirval!(BankRedirectType = LocalBankRedirect))
            }
            api_enums::PaymentMethodType::OnlineBankingThailand => {
                Ok(dirval!(BankRedirectType = OnlineBankingThailand))
            }
            api_enums::PaymentMethodType::TouchNGo => Ok(dirval!(WalletType = TouchNGo)),
            api_enums::PaymentMethodType::Atome => Ok(dirval!(PayLaterType = Atome)),
            api_enums::PaymentMethodType::Boleto => Ok(dirval!(VoucherType = Boleto)),
            api_enums::PaymentMethodType::Efecty => Ok(dirval!(VoucherType = Efecty)),
            api_enums::PaymentMethodType::PagoEfectivo => Ok(dirval!(VoucherType = PagoEfectivo)),
            api_enums::PaymentMethodType::RedCompra => Ok(dirval!(VoucherType = RedCompra)),
            api_enums::PaymentMethodType::RedPagos => Ok(dirval!(VoucherType = RedPagos)),
            api_enums::PaymentMethodType::Alfamart => Ok(dirval!(VoucherType = Alfamart)),
            api_enums::PaymentMethodType::BcaBankTransfer => {
                Ok(dirval!(BankTransferType = BcaBankTransfer))
            }
            api_enums::PaymentMethodType::BniVa => Ok(dirval!(BankTransferType = BniVa)),
            api_enums::PaymentMethodType::BriVa => Ok(dirval!(BankTransferType = BriVa)),
            api_enums::PaymentMethodType::CimbVa => Ok(dirval!(BankTransferType = CimbVa)),
            api_enums::PaymentMethodType::DanamonVa => Ok(dirval!(BankTransferType = DanamonVa)),
            api_enums::PaymentMethodType::Indomaret => Ok(dirval!(VoucherType = Indomaret)),
            api_enums::PaymentMethodType::MandiriVa => Ok(dirval!(BankTransferType = MandiriVa)),
            api_enums::PaymentMethodType::LocalBankTransfer => {
                Ok(dirval!(BankTransferType = LocalBankTransfer))
            }
            api_enums::PaymentMethodType::InstantBankTransfer => {
                Ok(dirval!(BankTransferType = InstantBankTransfer))
            }
            api_enums::PaymentMethodType::InstantBankTransferFinland => {
                Ok(dirval!(BankTransferType = InstantBankTransferFinland))
            }
            api_enums::PaymentMethodType::InstantBankTransferPoland => {
                Ok(dirval!(BankTransferType = InstantBankTransferPoland))
            }
            api_enums::PaymentMethodType::PermataBankTransfer => {
                Ok(dirval!(BankTransferType = PermataBankTransfer))
            }
            api_enums::PaymentMethodType::PaySafeCard => Ok(dirval!(GiftCardType = PaySafeCard)),
            api_enums::PaymentMethodType::SevenEleven => Ok(dirval!(VoucherType = SevenEleven)),
            api_enums::PaymentMethodType::Lawson => Ok(dirval!(VoucherType = Lawson)),
            api_enums::PaymentMethodType::MiniStop => Ok(dirval!(VoucherType = MiniStop)),
            api_enums::PaymentMethodType::FamilyMart => Ok(dirval!(VoucherType = FamilyMart)),
            api_enums::PaymentMethodType::Seicomart => Ok(dirval!(VoucherType = Seicomart)),
            api_enums::PaymentMethodType::PayEasy => Ok(dirval!(VoucherType = PayEasy)),
            api_enums::PaymentMethodType::Givex => Ok(dirval!(GiftCardType = Givex)),
            api_enums::PaymentMethodType::BhnCardNetwork => {
                Ok(dirval!(GiftCardType = BhnCardNetwork))
            }
            api_enums::PaymentMethodType::Benefit => Ok(dirval!(CardRedirectType = Benefit)),
            api_enums::PaymentMethodType::Knet => Ok(dirval!(CardRedirectType = Knet)),
            api_enums::PaymentMethodType::OpenBankingUk => {
                Ok(dirval!(BankRedirectType = OpenBankingUk))
            }
            api_enums::PaymentMethodType::MomoAtm => Ok(dirval!(CardRedirectType = MomoAtm)),
            api_enums::PaymentMethodType::Oxxo => Ok(dirval!(VoucherType = Oxxo)),
            api_enums::PaymentMethodType::CardRedirect => {
                Ok(dirval!(CardRedirectType = CardRedirect))
            }
            api_enums::PaymentMethodType::Venmo => Ok(dirval!(WalletType = Venmo)),
            api_enums::PaymentMethodType::Mifinity => Ok(dirval!(WalletType = Mifinity)),
            api_enums::PaymentMethodType::Fps => Ok(dirval!(RealTimePaymentType = Fps)),
            api_enums::PaymentMethodType::DuitNow => Ok(dirval!(RealTimePaymentType = DuitNow)),
            api_enums::PaymentMethodType::PromptPay => Ok(dirval!(RealTimePaymentType = PromptPay)),
            api_enums::PaymentMethodType::VietQr => Ok(dirval!(RealTimePaymentType = VietQr)),
            api_enums::PaymentMethodType::OpenBankingPIS => {
                Ok(dirval!(OpenBankingType = OpenBankingPIS))
            }
            api_enums::PaymentMethodType::Paze => Ok(dirval!(WalletType = Paze)),
            api_enums::PaymentMethodType::DirectCarrierBilling => {
                Ok(dirval!(MobilePaymentType = DirectCarrierBilling))
            }
            api_enums::PaymentMethodType::IndonesianBankTransfer => {
                Ok(dirval!(BankTransferType = IndonesianBankTransfer))
            }
        }
    }
}

impl IntoDirValue for api_enums::CardNetwork {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError> {
        match self {
            Self::Visa => Ok(dirval!(CardNetwork = Visa)),
            Self::Mastercard => Ok(dirval!(CardNetwork = Mastercard)),
            Self::AmericanExpress => Ok(dirval!(CardNetwork = AmericanExpress)),
            Self::JCB => Ok(dirval!(CardNetwork = JCB)),
            Self::DinersClub => Ok(dirval!(CardNetwork = DinersClub)),
            Self::Discover => Ok(dirval!(CardNetwork = Discover)),
            Self::CartesBancaires => Ok(dirval!(CardNetwork = CartesBancaires)),
            Self::UnionPay => Ok(dirval!(CardNetwork = UnionPay)),
            Self::Interac => Ok(dirval!(CardNetwork = Interac)),
            Self::RuPay => Ok(dirval!(CardNetwork = RuPay)),
            Self::Maestro => Ok(dirval!(CardNetwork = Maestro)),
            Self::Star => Ok(dirval!(CardNetwork = Star)),
            Self::Accel => Ok(dirval!(CardNetwork = Accel)),
            Self::Pulse => Ok(dirval!(CardNetwork = Pulse)),
            Self::Nyce => Ok(dirval!(CardNetwork = Nyce)),
        }
    }
}

impl IntoDirValue for api_enums::Currency {
    fn into_dir_value(self) -> Result<dir::DirValue, KgraphError> {
        match self {
            Self::AED => Ok(dirval!(PaymentCurrency = AED)),
            Self::AFN => Ok(dirval!(PaymentCurrency = AFN)),
            Self::ALL => Ok(dirval!(PaymentCurrency = ALL)),
            Self::AMD => Ok(dirval!(PaymentCurrency = AMD)),
            Self::ANG => Ok(dirval!(PaymentCurrency = ANG)),
            Self::AOA => Ok(dirval!(PaymentCurrency = AOA)),
            Self::ARS => Ok(dirval!(PaymentCurrency = ARS)),
            Self::AUD => Ok(dirval!(PaymentCurrency = AUD)),
            Self::AWG => Ok(dirval!(PaymentCurrency = AWG)),
            Self::AZN => Ok(dirval!(PaymentCurrency = AZN)),
            Self::BAM => Ok(dirval!(PaymentCurrency = BAM)),
            Self::BBD => Ok(dirval!(PaymentCurrency = BBD)),
            Self::BDT => Ok(dirval!(PaymentCurrency = BDT)),
            Self::BGN => Ok(dirval!(PaymentCurrency = BGN)),
            Self::BHD => Ok(dirval!(PaymentCurrency = BHD)),
            Self::BIF => Ok(dirval!(PaymentCurrency = BIF)),
            Self::BMD => Ok(dirval!(PaymentCurrency = BMD)),
            Self::BND => Ok(dirval!(PaymentCurrency = BND)),
            Self::BOB => Ok(dirval!(PaymentCurrency = BOB)),
            Self::BRL => Ok(dirval!(PaymentCurrency = BRL)),
            Self::BSD => Ok(dirval!(PaymentCurrency = BSD)),
            Self::BTN => Ok(dirval!(PaymentCurrency = BTN)),
            Self::BWP => Ok(dirval!(PaymentCurrency = BWP)),
            Self::BYN => Ok(dirval!(PaymentCurrency = BYN)),
            Self::BZD => Ok(dirval!(PaymentCurrency = BZD)),
            Self::CAD => Ok(dirval!(PaymentCurrency = CAD)),
            Self::CDF => Ok(dirval!(PaymentCurrency = CDF)),
            Self::CHF => Ok(dirval!(PaymentCurrency = CHF)),
            Self::CLF => Ok(dirval!(PaymentCurrency = CLF)),
            Self::CLP => Ok(dirval!(PaymentCurrency = CLP)),
            Self::CNY => Ok(dirval!(PaymentCurrency = CNY)),
            Self::COP => Ok(dirval!(PaymentCurrency = COP)),
            Self::CRC => Ok(dirval!(PaymentCurrency = CRC)),
            Self::CUC => Ok(dirval!(PaymentCurrency = CUC)),
            Self::CUP => Ok(dirval!(PaymentCurrency = CUP)),
            Self::CVE => Ok(dirval!(PaymentCurrency = CVE)),
            Self::CZK => Ok(dirval!(PaymentCurrency = CZK)),
            Self::DJF => Ok(dirval!(PaymentCurrency = DJF)),
            Self::DKK => Ok(dirval!(PaymentCurrency = DKK)),
            Self::DOP => Ok(dirval!(PaymentCurrency = DOP)),
            Self::DZD => Ok(dirval!(PaymentCurrency = DZD)),
            Self::EGP => Ok(dirval!(PaymentCurrency = EGP)),
            Self::ERN => Ok(dirval!(PaymentCurrency = ERN)),
            Self::ETB => Ok(dirval!(PaymentCurrency = ETB)),
            Self::EUR => Ok(dirval!(PaymentCurrency = EUR)),
            Self::FJD => Ok(dirval!(PaymentCurrency = FJD)),
            Self::FKP => Ok(dirval!(PaymentCurrency = FKP)),
            Self::GBP => Ok(dirval!(PaymentCurrency = GBP)),
            Self::GEL => Ok(dirval!(PaymentCurrency = GEL)),
            Self::GHS => Ok(dirval!(PaymentCurrency = GHS)),
            Self::GIP => Ok(dirval!(PaymentCurrency = GIP)),
            Self::GMD => Ok(dirval!(PaymentCurrency = GMD)),
            Self::GNF => Ok(dirval!(PaymentCurrency = GNF)),
            Self::GTQ => Ok(dirval!(PaymentCurrency = GTQ)),
            Self::GYD => Ok(dirval!(PaymentCurrency = GYD)),
            Self::HKD => Ok(dirval!(PaymentCurrency = HKD)),
            Self::HNL => Ok(dirval!(PaymentCurrency = HNL)),
            Self::HRK => Ok(dirval!(PaymentCurrency = HRK)),
            Self::HTG => Ok(dirval!(PaymentCurrency = HTG)),
            Self::HUF => Ok(dirval!(PaymentCurrency = HUF)),
            Self::IDR => Ok(dirval!(PaymentCurrency = IDR)),
            Self::ILS => Ok(dirval!(PaymentCurrency = ILS)),
            Self::INR => Ok(dirval!(PaymentCurrency = INR)),
            Self::IQD => Ok(dirval!(PaymentCurrency = IQD)),
            Self::IRR => Ok(dirval!(PaymentCurrency = IRR)),
            Self::ISK => Ok(dirval!(PaymentCurrency = ISK)),
            Self::JMD => Ok(dirval!(PaymentCurrency = JMD)),
            Self::JOD => Ok(dirval!(PaymentCurrency = JOD)),
            Self::JPY => Ok(dirval!(PaymentCurrency = JPY)),
            Self::KES => Ok(dirval!(PaymentCurrency = KES)),
            Self::KGS => Ok(dirval!(PaymentCurrency = KGS)),
            Self::KHR => Ok(dirval!(PaymentCurrency = KHR)),
            Self::KMF => Ok(dirval!(PaymentCurrency = KMF)),
            Self::KPW => Ok(dirval!(PaymentCurrency = KPW)),
            Self::KRW => Ok(dirval!(PaymentCurrency = KRW)),
            Self::KWD => Ok(dirval!(PaymentCurrency = KWD)),
            Self::KYD => Ok(dirval!(PaymentCurrency = KYD)),
            Self::KZT => Ok(dirval!(PaymentCurrency = KZT)),
            Self::LAK => Ok(dirval!(PaymentCurrency = LAK)),
            Self::LBP => Ok(dirval!(PaymentCurrency = LBP)),
            Self::LKR => Ok(dirval!(PaymentCurrency = LKR)),
            Self::LRD => Ok(dirval!(PaymentCurrency = LRD)),
            Self::LSL => Ok(dirval!(PaymentCurrency = LSL)),
            Self::LYD => Ok(dirval!(PaymentCurrency = LYD)),
            Self::MAD => Ok(dirval!(PaymentCurrency = MAD)),
            Self::MDL => Ok(dirval!(PaymentCurrency = MDL)),
            Self::MGA => Ok(dirval!(PaymentCurrency = MGA)),
            Self::MKD => Ok(dirval!(PaymentCurrency = MKD)),
            Self::MMK => Ok(dirval!(PaymentCurrency = MMK)),
            Self::MNT => Ok(dirval!(PaymentCurrency = MNT)),
            Self::MOP => Ok(dirval!(PaymentCurrency = MOP)),
            Self::MRU => Ok(dirval!(PaymentCurrency = MRU)),
            Self::MUR => Ok(dirval!(PaymentCurrency = MUR)),
            Self::MVR => Ok(dirval!(PaymentCurrency = MVR)),
            Self::MWK => Ok(dirval!(PaymentCurrency = MWK)),
            Self::MXN => Ok(dirval!(PaymentCurrency = MXN)),
            Self::MYR => Ok(dirval!(PaymentCurrency = MYR)),
            Self::MZN => Ok(dirval!(PaymentCurrency = MZN)),
            Self::NAD => Ok(dirval!(PaymentCurrency = NAD)),
            Self::NGN => Ok(dirval!(PaymentCurrency = NGN)),
            Self::NIO => Ok(dirval!(PaymentCurrency = NIO)),
            Self::NOK => Ok(dirval!(PaymentCurrency = NOK)),
            Self::NPR => Ok(dirval!(PaymentCurrency = NPR)),
            Self::NZD => Ok(dirval!(PaymentCurrency = NZD)),
            Self::OMR => Ok(dirval!(PaymentCurrency = OMR)),
            Self::PAB => Ok(dirval!(PaymentCurrency = PAB)),
            Self::PEN => Ok(dirval!(PaymentCurrency = PEN)),
            Self::PGK => Ok(dirval!(PaymentCurrency = PGK)),
            Self::PHP => Ok(dirval!(PaymentCurrency = PHP)),
            Self::PKR => Ok(dirval!(PaymentCurrency = PKR)),
            Self::PLN => Ok(dirval!(PaymentCurrency = PLN)),
            Self::PYG => Ok(dirval!(PaymentCurrency = PYG)),
            Self::QAR => Ok(dirval!(PaymentCurrency = QAR)),
            Self::RON => Ok(dirval!(PaymentCurrency = RON)),
            Self::RSD => Ok(dirval!(PaymentCurrency = RSD)),
            Self::RUB => Ok(dirval!(PaymentCurrency = RUB)),
            Self::RWF => Ok(dirval!(PaymentCurrency = RWF)),
            Self::SAR => Ok(dirval!(PaymentCurrency = SAR)),
            Self::SBD => Ok(dirval!(PaymentCurrency = SBD)),
            Self::SCR => Ok(dirval!(PaymentCurrency = SCR)),
            Self::SDG => Ok(dirval!(PaymentCurrency = SDG)),
            Self::SEK => Ok(dirval!(PaymentCurrency = SEK)),
            Self::SGD => Ok(dirval!(PaymentCurrency = SGD)),
            Self::SHP => Ok(dirval!(PaymentCurrency = SHP)),
            Self::SLE => Ok(dirval!(PaymentCurrency = SLE)),
            Self::SLL => Ok(dirval!(PaymentCurrency = SLL)),
            Self::SOS => Ok(dirval!(PaymentCurrency = SOS)),
            Self::SRD => Ok(dirval!(PaymentCurrency = SRD)),
            Self::SSP => Ok(dirval!(PaymentCurrency = SSP)),
            Self::STD => Ok(dirval!(PaymentCurrency = STD)),
            Self::STN => Ok(dirval!(PaymentCurrency = STN)),
            Self::SVC => Ok(dirval!(PaymentCurrency = SVC)),
            Self::SYP => Ok(dirval!(PaymentCurrency = SYP)),
            Self::SZL => Ok(dirval!(PaymentCurrency = SZL)),
            Self::THB => Ok(dirval!(PaymentCurrency = THB)),
            Self::TJS => Ok(dirval!(PaymentCurrency = TJS)),
            Self::TMT => Ok(dirval!(PaymentCurrency = TMT)),
            Self::TND => Ok(dirval!(PaymentCurrency = TND)),
            Self::TOP => Ok(dirval!(PaymentCurrency = TOP)),
            Self::TRY => Ok(dirval!(PaymentCurrency = TRY)),
            Self::TTD => Ok(dirval!(PaymentCurrency = TTD)),
            Self::TWD => Ok(dirval!(PaymentCurrency = TWD)),
            Self::TZS => Ok(dirval!(PaymentCurrency = TZS)),
            Self::UAH => Ok(dirval!(PaymentCurrency = UAH)),
            Self::UGX => Ok(dirval!(PaymentCurrency = UGX)),
            Self::USD => Ok(dirval!(PaymentCurrency = USD)),
            Self::UYU => Ok(dirval!(PaymentCurrency = UYU)),
            Self::UZS => Ok(dirval!(PaymentCurrency = UZS)),
            Self::VES => Ok(dirval!(PaymentCurrency = VES)),
            Self::VND => Ok(dirval!(PaymentCurrency = VND)),
            Self::VUV => Ok(dirval!(PaymentCurrency = VUV)),
            Self::WST => Ok(dirval!(PaymentCurrency = WST)),
            Self::XAF => Ok(dirval!(PaymentCurrency = XAF)),
            Self::XCD => Ok(dirval!(PaymentCurrency = XCD)),
            Self::XOF => Ok(dirval!(PaymentCurrency = XOF)),
            Self::XPF => Ok(dirval!(PaymentCurrency = XPF)),
            Self::YER => Ok(dirval!(PaymentCurrency = YER)),
            Self::ZAR => Ok(dirval!(PaymentCurrency = ZAR)),
            Self::ZMW => Ok(dirval!(PaymentCurrency = ZMW)),
            Self::ZWL => Ok(dirval!(PaymentCurrency = ZWL)),
        }
    }
}

pub fn get_dir_country_dir_value(c: api_enums::Country) -> dir::enums::Country {
    match c {
        api_enums::Country::Afghanistan => dir::enums::Country::Afghanistan,
        api_enums::Country::AlandIslands => dir::enums::Country::AlandIslands,
        api_enums::Country::Albania => dir::enums::Country::Albania,
        api_enums::Country::Algeria => dir::enums::Country::Algeria,
        api_enums::Country::AmericanSamoa => dir::enums::Country::AmericanSamoa,
        api_enums::Country::Andorra => dir::enums::Country::Andorra,
        api_enums::Country::Angola => dir::enums::Country::Angola,
        api_enums::Country::Anguilla => dir::enums::Country::Anguilla,
        api_enums::Country::Antarctica => dir::enums::Country::Antarctica,
        api_enums::Country::AntiguaAndBarbuda => dir::enums::Country::AntiguaAndBarbuda,
        api_enums::Country::Argentina => dir::enums::Country::Argentina,
        api_enums::Country::Armenia => dir::enums::Country::Armenia,
        api_enums::Country::Aruba => dir::enums::Country::Aruba,
        api_enums::Country::Australia => dir::enums::Country::Australia,
        api_enums::Country::Austria => dir::enums::Country::Austria,
        api_enums::Country::Azerbaijan => dir::enums::Country::Azerbaijan,
        api_enums::Country::Bahamas => dir::enums::Country::Bahamas,
        api_enums::Country::Bahrain => dir::enums::Country::Bahrain,
        api_enums::Country::Bangladesh => dir::enums::Country::Bangladesh,
        api_enums::Country::Barbados => dir::enums::Country::Barbados,
        api_enums::Country::Belarus => dir::enums::Country::Belarus,
        api_enums::Country::Belgium => dir::enums::Country::Belgium,
        api_enums::Country::Belize => dir::enums::Country::Belize,
        api_enums::Country::Benin => dir::enums::Country::Benin,
        api_enums::Country::Bermuda => dir::enums::Country::Bermuda,
        api_enums::Country::Bhutan => dir::enums::Country::Bhutan,
        api_enums::Country::BoliviaPlurinationalState => {
            dir::enums::Country::BoliviaPlurinationalState
        }
        api_enums::Country::BonaireSintEustatiusAndSaba => {
            dir::enums::Country::BonaireSintEustatiusAndSaba
        }
        api_enums::Country::BosniaAndHerzegovina => dir::enums::Country::BosniaAndHerzegovina,
        api_enums::Country::Botswana => dir::enums::Country::Botswana,
        api_enums::Country::BouvetIsland => dir::enums::Country::BouvetIsland,
        api_enums::Country::Brazil => dir::enums::Country::Brazil,
        api_enums::Country::BritishIndianOceanTerritory => {
            dir::enums::Country::BritishIndianOceanTerritory
        }
        api_enums::Country::BruneiDarussalam => dir::enums::Country::BruneiDarussalam,
        api_enums::Country::Bulgaria => dir::enums::Country::Bulgaria,
        api_enums::Country::BurkinaFaso => dir::enums::Country::BurkinaFaso,
        api_enums::Country::Burundi => dir::enums::Country::Burundi,
        api_enums::Country::CaboVerde => dir::enums::Country::CaboVerde,
        api_enums::Country::Cambodia => dir::enums::Country::Cambodia,
        api_enums::Country::Cameroon => dir::enums::Country::Cameroon,
        api_enums::Country::Canada => dir::enums::Country::Canada,
        api_enums::Country::CaymanIslands => dir::enums::Country::CaymanIslands,


// Struct: CryptopayPaymentsResponse
// File: crates/hyperswitch_connectors/src/connectors/cryptopay/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct CryptopayPaymentsResponse


// Implementation: impl api::MandateSetup for for UnifiedAuthenticationService
// File: crates/hyperswitch_connectors/src/connectors/unified_authentication_service.rs
// Module: hyperswitch_connectors
// Methods: 0 total (0 public)

impl api::MandateSetup for for UnifiedAuthenticationService


// Implementation: impl api::PaymentCapture for for Paystack
// File: crates/hyperswitch_connectors/src/connectors/paystack.rs
// Module: hyperswitch_connectors
// Methods: 0 total (0 public)

impl api::PaymentCapture for for Paystack


// Struct: MerchantAccount
// File: crates/diesel_models/src/merchant_account.rs
// Module: diesel_models
// Implementations: 1

pub struct MerchantAccount


// Function: is_confirm
// File: crates/router/src/core/payments.rs
// Module: router

pub fn is_confirm<'a, F: Clone + Send, R, Op>(
    operation: &'a Op,
    confirm: Option<bool>,
) -> BoxedOperation<'a, F, R, PaymentData<F>>
where
    PaymentConfirm: Operation<F, R, Data = PaymentData<F>>,
    &'a PaymentConfirm: Operation<F, R, Data = PaymentData<F>>,
    Op: Operation<F, R, Data = PaymentData<F>> + Send + Sync,
    &'a Op: Operation<F, R, Data = PaymentData<F>>,


// Function: get_merchant_default_config
// File: crates/router/src/core/routing/helpers.rs
// Module: router

// Documentation: Provides us with all the configured configs of the Merchant in the ascending time configured manner and chooses the first of them

pub fn get_merchant_default_config(
    db: &dyn StorageInterface,
    // Cannot make this as merchant id domain type because, we are passing profile id also here
    merchant_id: &str,
    transaction_type: &storage::enums::TransactionType,
) -> RouterResult<Vec<routing_types::RoutableConnectorChoice>>


// Function: parse_googlepay_token_safely
// File: crates/hyperswitch_connectors/src/connectors/fiserv/transformers.rs
// Module: hyperswitch_connectors

pub fn parse_googlepay_token_safely(token_json_str: &str) -> FullyParsedGooglePayToken


// Function: new
// File: crates/hyperswitch_connectors/src/connectors/archipel.rs
// Module: hyperswitch_connectors

pub fn new() -> &'static Self


// Struct: FortePaymentsResponse
// File: crates/hyperswitch_connectors/src/connectors/forte/transformers.rs
// Module: hyperswitch_connectors
// Implementations: 0

pub struct FortePaymentsResponse


// Function: should_call_unified_connector_service_for_webhooks
// File: crates/router/src/core/unified_connector_service.rs
// Module: router

pub fn should_call_unified_connector_service_for_webhooks(
    state: &SessionState,
    merchant_context: &MerchantContext,
    connector_name: &str,
) -> RouterResult<bool>