Files
Sai Harsha Vardhan bdf1e5147e feat(router): added dispute accept api, file module apis and dispute evidence submission api (#900)
Co-authored-by: Sangamesh <sangamesh.kulkarni@juspay.in>
Co-authored-by: sai harsha <sai.harsha@sai.harsha-MacBookPro>
Co-authored-by: Arun Raj M <jarnura47@gmail.com>
2023-04-24 19:35:21 +00:00

332 lines
8.3 KiB
Rust

pub mod authorize_flow;
pub mod cancel_flow;
pub mod capture_flow;
pub mod complete_authorize_flow;
pub mod psync_flow;
pub mod session_flow;
pub mod verfiy_flow;
use async_trait::async_trait;
use crate::{
connector,
core::{
errors::{ConnectorError, CustomResult, RouterResult},
payments,
},
routes::AppState,
services,
types::{self, api, storage},
};
#[async_trait]
pub trait ConstructFlowSpecificData<F, Req, Res> {
async fn construct_router_data<'a>(
&self,
state: &AppState,
connector_id: &str,
merchant_account: &storage::MerchantAccount,
) -> RouterResult<types::RouterData<F, Req, Res>>;
}
#[async_trait]
pub trait Feature<F, T> {
async fn decide_flows<'a>(
self,
state: &AppState,
connector: &api::ConnectorData,
maybe_customer: &Option<storage::Customer>,
call_connector_action: payments::CallConnectorAction,
merchant_account: &storage::MerchantAccount,
) -> RouterResult<Self>
where
Self: Sized,
F: Clone,
dyn api::Connector: services::ConnectorIntegration<F, T, types::PaymentsResponseData>;
async fn add_access_token<'a>(
&self,
state: &AppState,
connector: &api::ConnectorData,
merchant_account: &storage::MerchantAccount,
) -> RouterResult<types::AddAccessTokenResult>
where
F: Clone,
Self: Sized,
dyn api::Connector: services::ConnectorIntegration<F, T, types::PaymentsResponseData>;
async fn add_payment_method_token<'a>(
&self,
_state: &AppState,
_connector: &api::ConnectorData,
_tokenization_action: &payments::TokenizationAction,
) -> RouterResult<Option<String>>
where
F: Clone,
Self: Sized,
dyn api::Connector: services::ConnectorIntegration<F, T, types::PaymentsResponseData>,
{
Ok(None)
}
}
macro_rules! default_imp_for_complete_authorize{
($($path:ident::$connector:ident),*)=> {
$(
impl api::PaymentsCompleteAuthorize for $path::$connector {}
impl
services::ConnectorIntegration<
api::CompleteAuthorize,
types::CompleteAuthorizeData,
types::PaymentsResponseData,
> for $path::$connector
{}
)*
};
}
default_imp_for_complete_authorize!(
connector::Aci,
connector::Adyen,
connector::Authorizedotnet,
connector::Bambora,
connector::Bluesnap,
connector::Braintree,
connector::Checkout,
connector::Coinbase,
connector::Cybersource,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Klarna,
connector::Multisafepay,
connector::Nexinets,
connector::Opennode,
connector::Payeezy,
connector::Payu,
connector::Rapyd,
connector::Stripe,
connector::Trustpay,
connector::Worldline,
connector::Worldpay
);
macro_rules! default_imp_for_connector_redirect_response{
($($path:ident::$connector:ident),*)=> {
$(
impl services::ConnectorRedirectResponse for $path::$connector {
fn get_flow_type(
&self,
_query_params: &str,
_json_payload: Option<serde_json::Value>,
_action: services::PaymentAction
) -> CustomResult<payments::CallConnectorAction, ConnectorError> {
Ok(payments::CallConnectorAction::Trigger)
}
}
)*
};
}
default_imp_for_connector_redirect_response!(
connector::Aci,
connector::Adyen,
connector::Authorizedotnet,
connector::Bambora,
connector::Bluesnap,
connector::Braintree,
connector::Coinbase,
connector::Cybersource,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Klarna,
connector::Multisafepay,
connector::Nexinets,
connector::Opennode,
connector::Payeezy,
connector::Payu,
connector::Rapyd,
connector::Shift4,
connector::Worldline,
connector::Worldpay
);
macro_rules! default_imp_for_connector_request_id{
($($path:ident::$connector:ident),*)=> {
$(
impl api::ConnectorTransactionId for $path::$connector {}
)*
};
}
default_imp_for_connector_request_id!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bluesnap,
connector::Braintree,
connector::Checkout,
connector::Coinbase,
connector::Cybersource,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nuvei,
connector::Opennode,
connector::Payeezy,
connector::Payu,
connector::Rapyd,
connector::Shift4,
connector::Stripe,
connector::Trustpay,
connector::Worldline,
connector::Worldpay
);
macro_rules! default_imp_for_accept_dispute{
($($path:ident::$connector:ident),*)=> {
$(
impl api::Dispute for $path::$connector {}
impl api::AcceptDispute for $path::$connector {}
impl
services::ConnectorIntegration<
api::Accept,
types::AcceptDisputeRequestData,
types::AcceptDisputeResponse,
> for $path::$connector
{}
)*
};
}
default_imp_for_accept_dispute!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bluesnap,
connector::Braintree,
connector::Coinbase,
connector::Cybersource,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nuvei,
connector::Payeezy,
connector::Paypal,
connector::Payu,
connector::Rapyd,
connector::Shift4,
connector::Stripe,
connector::Trustpay,
connector::Opennode,
connector::Worldline,
connector::Worldpay
);
macro_rules! default_imp_for_file_upload{
($($path:ident::$connector:ident),*)=> {
$(
impl api::FileUpload for $path::$connector {}
impl api::UploadFile for $path::$connector {}
impl
services::ConnectorIntegration<
api::Upload,
types::UploadFileRequestData,
types::UploadFileResponse,
> for $path::$connector
{}
)*
};
}
default_imp_for_file_upload!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bluesnap,
connector::Braintree,
connector::Coinbase,
connector::Cybersource,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nuvei,
connector::Payeezy,
connector::Paypal,
connector::Payu,
connector::Rapyd,
connector::Shift4,
connector::Trustpay,
connector::Opennode,
connector::Worldline,
connector::Worldpay
);
macro_rules! default_imp_for_submit_evidence{
($($path:ident::$connector:ident),*)=> {
$(
impl api::SubmitEvidence for $path::$connector {}
impl
services::ConnectorIntegration<
api::Evidence,
types::SubmitEvidenceRequestData,
types::SubmitEvidenceResponse,
> for $path::$connector
{}
)*
};
}
default_imp_for_submit_evidence!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bluesnap,
connector::Braintree,
connector::Checkout,
connector::Cybersource,
connector::Coinbase,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nuvei,
connector::Payeezy,
connector::Paypal,
connector::Payu,
connector::Rapyd,
connector::Shift4,
connector::Trustpay,
connector::Opennode,
connector::Worldline,
connector::Worldpay
);