mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
refactor: use strum::EnumString implementation for connector name conversions (#1052)
Co-authored-by: Sanchith Hegde <22217505+SanchithHegde@users.noreply.github.com>
This commit is contained in:
@ -569,7 +569,6 @@ pub enum MandateStatus {
|
|||||||
Clone,
|
Clone,
|
||||||
Copy,
|
Copy,
|
||||||
Debug,
|
Debug,
|
||||||
Default,
|
|
||||||
Eq,
|
Eq,
|
||||||
PartialEq,
|
PartialEq,
|
||||||
ToSchema,
|
ToSchema,
|
||||||
@ -586,7 +585,6 @@ pub enum Connector {
|
|||||||
Aci,
|
Aci,
|
||||||
Adyen,
|
Adyen,
|
||||||
Airwallex,
|
Airwallex,
|
||||||
Applepay,
|
|
||||||
Authorizedotnet,
|
Authorizedotnet,
|
||||||
Bitpay,
|
Bitpay,
|
||||||
Bluesnap,
|
Bluesnap,
|
||||||
@ -594,8 +592,6 @@ pub enum Connector {
|
|||||||
Checkout,
|
Checkout,
|
||||||
Coinbase,
|
Coinbase,
|
||||||
Cybersource,
|
Cybersource,
|
||||||
#[default]
|
|
||||||
Dummy,
|
|
||||||
Iatapay,
|
Iatapay,
|
||||||
#[cfg(feature = "dummy_connector")]
|
#[cfg(feature = "dummy_connector")]
|
||||||
#[serde(rename = "dummyconnector1")]
|
#[serde(rename = "dummyconnector1")]
|
||||||
@ -632,7 +628,6 @@ pub enum Connector {
|
|||||||
Worldline,
|
Worldline,
|
||||||
Worldpay,
|
Worldpay,
|
||||||
Zen,
|
Zen,
|
||||||
Signifyd,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Connector {
|
impl Connector {
|
||||||
|
|||||||
@ -199,50 +199,94 @@ impl ConnectorData {
|
|||||||
_connectors: &Connectors,
|
_connectors: &Connectors,
|
||||||
connector_name: &str,
|
connector_name: &str,
|
||||||
) -> CustomResult<BoxedConnector, errors::ApiErrorResponse> {
|
) -> CustomResult<BoxedConnector, errors::ApiErrorResponse> {
|
||||||
match connector_name {
|
match enums::Connector::from_str(connector_name) {
|
||||||
"aci" => Ok(Box::new(&connector::Aci)),
|
Ok(name) => match name {
|
||||||
"adyen" => Ok(Box::new(&connector::Adyen)),
|
enums::Connector::Aci => Ok(Box::new(&connector::Aci)),
|
||||||
"airwallex" => Ok(Box::new(&connector::Airwallex)),
|
enums::Connector::Adyen => Ok(Box::new(&connector::Adyen)),
|
||||||
"authorizedotnet" => Ok(Box::new(&connector::Authorizedotnet)),
|
enums::Connector::Airwallex => Ok(Box::new(&connector::Airwallex)),
|
||||||
"bambora" => Ok(Box::new(&connector::Bambora)),
|
enums::Connector::Authorizedotnet => Ok(Box::new(&connector::Authorizedotnet)),
|
||||||
"bitpay" => Ok(Box::new(&connector::Bitpay)),
|
enums::Connector::Bambora => Ok(Box::new(&connector::Bambora)),
|
||||||
"bluesnap" => Ok(Box::new(&connector::Bluesnap)),
|
enums::Connector::Bitpay => Ok(Box::new(&connector::Bitpay)),
|
||||||
"braintree" => Ok(Box::new(&connector::Braintree)),
|
enums::Connector::Bluesnap => Ok(Box::new(&connector::Bluesnap)),
|
||||||
"checkout" => Ok(Box::new(&connector::Checkout)),
|
enums::Connector::Braintree => Ok(Box::new(&connector::Braintree)),
|
||||||
"coinbase" => Ok(Box::new(&connector::Coinbase)),
|
enums::Connector::Checkout => Ok(Box::new(&connector::Checkout)),
|
||||||
"cybersource" => Ok(Box::new(&connector::Cybersource)),
|
enums::Connector::Coinbase => Ok(Box::new(&connector::Coinbase)),
|
||||||
"dlocal" => Ok(Box::new(&connector::Dlocal)),
|
enums::Connector::Cybersource => Ok(Box::new(&connector::Cybersource)),
|
||||||
#[cfg(feature = "dummy_connector")]
|
enums::Connector::Dlocal => Ok(Box::new(&connector::Dlocal)),
|
||||||
"dummyconnector1" => Ok(Box::new(&connector::DummyConnector::<1>)),
|
#[cfg(feature = "dummy_connector")]
|
||||||
#[cfg(feature = "dummy_connector")]
|
enums::Connector::DummyConnector1 => Ok(Box::new(&connector::DummyConnector::<1>)),
|
||||||
"dummyconnector2" => Ok(Box::new(&connector::DummyConnector::<2>)),
|
#[cfg(feature = "dummy_connector")]
|
||||||
#[cfg(feature = "dummy_connector")]
|
enums::Connector::DummyConnector2 => Ok(Box::new(&connector::DummyConnector::<2>)),
|
||||||
"dummyconnector3" => Ok(Box::new(&connector::DummyConnector::<3>)),
|
#[cfg(feature = "dummy_connector")]
|
||||||
"fiserv" => Ok(Box::new(&connector::Fiserv)),
|
enums::Connector::DummyConnector3 => Ok(Box::new(&connector::DummyConnector::<3>)),
|
||||||
"forte" => Ok(Box::new(&connector::Forte)),
|
enums::Connector::Fiserv => Ok(Box::new(&connector::Fiserv)),
|
||||||
"globalpay" => Ok(Box::new(&connector::Globalpay)),
|
enums::Connector::Forte => Ok(Box::new(&connector::Forte)),
|
||||||
"iatapay" => Ok(Box::new(&connector::Iatapay)),
|
enums::Connector::Globalpay => Ok(Box::new(&connector::Globalpay)),
|
||||||
"klarna" => Ok(Box::new(&connector::Klarna)),
|
enums::Connector::Iatapay => Ok(Box::new(&connector::Iatapay)),
|
||||||
"mollie" => Ok(Box::new(&connector::Mollie)),
|
enums::Connector::Klarna => Ok(Box::new(&connector::Klarna)),
|
||||||
"nmi" => Ok(Box::new(&connector::Nmi)),
|
enums::Connector::Mollie => Ok(Box::new(&connector::Mollie)),
|
||||||
// "noon" => Ok(Box::new(&connector::Noon)), added as template code for future usage
|
enums::Connector::Nmi => Ok(Box::new(&connector::Nmi)),
|
||||||
"nuvei" => Ok(Box::new(&connector::Nuvei)),
|
// "noon" => Ok(Box::new(&connector::Noon)), added as template code for future usage
|
||||||
"opennode" => Ok(Box::new(&connector::Opennode)),
|
enums::Connector::Nuvei => Ok(Box::new(&connector::Nuvei)),
|
||||||
// "payeezy" => Ok(Box::new(&connector::Payeezy)), As psync and rsync are not supported by this connector, it is added as template code for future usage
|
enums::Connector::Opennode => Ok(Box::new(&connector::Opennode)),
|
||||||
"payu" => Ok(Box::new(&connector::Payu)),
|
// "payeezy" => Ok(Box::new(&connector::Payeezy)), As psync and rsync are not supported by this connector, it is added as template code for future usage
|
||||||
"rapyd" => Ok(Box::new(&connector::Rapyd)),
|
enums::Connector::Payu => Ok(Box::new(&connector::Payu)),
|
||||||
"shift4" => Ok(Box::new(&connector::Shift4)),
|
enums::Connector::Rapyd => Ok(Box::new(&connector::Rapyd)),
|
||||||
"stripe" => Ok(Box::new(&connector::Stripe)),
|
enums::Connector::Shift4 => Ok(Box::new(&connector::Shift4)),
|
||||||
"worldline" => Ok(Box::new(&connector::Worldline)),
|
enums::Connector::Stripe => Ok(Box::new(&connector::Stripe)),
|
||||||
"worldpay" => Ok(Box::new(&connector::Worldpay)),
|
enums::Connector::Worldline => Ok(Box::new(&connector::Worldline)),
|
||||||
"multisafepay" => Ok(Box::new(&connector::Multisafepay)),
|
enums::Connector::Worldpay => Ok(Box::new(&connector::Worldpay)),
|
||||||
"nexinets" => Ok(Box::new(&connector::Nexinets)),
|
enums::Connector::Multisafepay => Ok(Box::new(&connector::Multisafepay)),
|
||||||
"paypal" => Ok(Box::new(&connector::Paypal)),
|
enums::Connector::Nexinets => Ok(Box::new(&connector::Nexinets)),
|
||||||
"trustpay" => Ok(Box::new(&connector::Trustpay)),
|
enums::Connector::Paypal => Ok(Box::new(&connector::Paypal)),
|
||||||
"zen" => Ok(Box::new(&connector::Zen)),
|
enums::Connector::Trustpay => Ok(Box::new(&connector::Trustpay)),
|
||||||
_ => Err(report!(errors::ConnectorError::InvalidConnectorName)
|
enums::Connector::Zen => Ok(Box::new(&connector::Zen)),
|
||||||
|
},
|
||||||
|
Err(_) => Err(report!(errors::ConnectorError::InvalidConnectorName)
|
||||||
.attach_printable(format!("invalid connector name: {connector_name}")))
|
.attach_printable(format!("invalid connector name: {connector_name}")))
|
||||||
.change_context(errors::ApiErrorResponse::InternalServerError),
|
.change_context(errors::ApiErrorResponse::InternalServerError),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
#![allow(clippy::unwrap_used)]
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_convert_connector_parsing_success() {
|
||||||
|
let result = enums::Connector::from_str("aci");
|
||||||
|
assert!(result.is_ok());
|
||||||
|
assert_eq!(result.unwrap(), enums::Connector::Aci);
|
||||||
|
|
||||||
|
let result = enums::Connector::from_str("shift4");
|
||||||
|
assert!(result.is_ok());
|
||||||
|
assert_eq!(result.unwrap(), enums::Connector::Shift4);
|
||||||
|
|
||||||
|
let result = enums::Connector::from_str("authorizedotnet");
|
||||||
|
assert!(result.is_ok());
|
||||||
|
assert_eq!(result.unwrap(), enums::Connector::Authorizedotnet);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_convert_connector_parsing_fail_for_unknown_type() {
|
||||||
|
let result = enums::Connector::from_str("unknowntype");
|
||||||
|
assert!(result.is_err());
|
||||||
|
|
||||||
|
let result = enums::Connector::from_str("randomstring");
|
||||||
|
assert!(result.is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_convert_connector_parsing_fail_for_camel_case() {
|
||||||
|
let result = enums::Connector::from_str("Paypal");
|
||||||
|
assert!(result.is_err());
|
||||||
|
|
||||||
|
let result = enums::Connector::from_str("Authorizedotnet");
|
||||||
|
assert!(result.is_err());
|
||||||
|
|
||||||
|
let result = enums::Connector::from_str("Opennode");
|
||||||
|
assert!(result.is_err());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -12,6 +12,7 @@ pub struct RoutingData {
|
|||||||
impl crate::utils::storage_partitioning::KvStorePartition for PaymentAttempt {}
|
impl crate::utils::storage_partitioning::KvStorePartition for PaymentAttempt {}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
#[cfg(feature = "dummy_connector")]
|
||||||
mod tests {
|
mod tests {
|
||||||
#![allow(clippy::expect_used, clippy::unwrap_used)]
|
#![allow(clippy::expect_used, clippy::unwrap_used)]
|
||||||
use tokio::sync::oneshot;
|
use tokio::sync::oneshot;
|
||||||
@ -34,7 +35,7 @@ mod tests {
|
|||||||
|
|
||||||
let payment_id = Uuid::new_v4().to_string();
|
let payment_id = Uuid::new_v4().to_string();
|
||||||
let current_time = common_utils::date_time::now();
|
let current_time = common_utils::date_time::now();
|
||||||
let connector = types::Connector::Dummy.to_string();
|
let connector = types::Connector::DummyConnector1.to_string();
|
||||||
let payment_attempt = PaymentAttemptNew {
|
let payment_attempt = PaymentAttemptNew {
|
||||||
payment_id: payment_id.clone(),
|
payment_id: payment_id.clone(),
|
||||||
connector: Some(connector),
|
connector: Some(connector),
|
||||||
@ -66,7 +67,7 @@ mod tests {
|
|||||||
let payment_id = Uuid::new_v4().to_string();
|
let payment_id = Uuid::new_v4().to_string();
|
||||||
let attempt_id = Uuid::new_v4().to_string();
|
let attempt_id = Uuid::new_v4().to_string();
|
||||||
let merchant_id = Uuid::new_v4().to_string();
|
let merchant_id = Uuid::new_v4().to_string();
|
||||||
let connector = types::Connector::Dummy.to_string();
|
let connector = types::Connector::DummyConnector1.to_string();
|
||||||
|
|
||||||
let payment_attempt = PaymentAttemptNew {
|
let payment_attempt = PaymentAttemptNew {
|
||||||
payment_id: payment_id.clone(),
|
payment_id: payment_id.clone(),
|
||||||
@ -105,11 +106,11 @@ mod tests {
|
|||||||
async fn test_payment_attempt_mandate_field() {
|
async fn test_payment_attempt_mandate_field() {
|
||||||
use crate::configs::settings::Settings;
|
use crate::configs::settings::Settings;
|
||||||
let conf = Settings::new().expect("invalid settings");
|
let conf = Settings::new().expect("invalid settings");
|
||||||
let uuid = uuid::Uuid::new_v4().to_string();
|
let uuid = Uuid::new_v4().to_string();
|
||||||
let tx: oneshot::Sender<()> = oneshot::channel().0;
|
let tx: oneshot::Sender<()> = oneshot::channel().0;
|
||||||
let state = routes::AppState::with_storage(conf, StorageImpl::PostgresqlTest, tx).await;
|
let state = routes::AppState::with_storage(conf, StorageImpl::PostgresqlTest, tx).await;
|
||||||
let current_time = common_utils::date_time::now();
|
let current_time = common_utils::date_time::now();
|
||||||
let connector = types::Connector::Dummy.to_string();
|
let connector = types::Connector::DummyConnector1.to_string();
|
||||||
|
|
||||||
let payment_attempt = PaymentAttemptNew {
|
let payment_attempt = PaymentAttemptNew {
|
||||||
payment_id: uuid.clone(),
|
payment_id: uuid.clone(),
|
||||||
|
|||||||
@ -16,7 +16,7 @@ impl utils::Connector for NoonTest {
|
|||||||
use router::connector::Noon;
|
use router::connector::Noon;
|
||||||
types::api::ConnectorData {
|
types::api::ConnectorData {
|
||||||
connector: Box::new(&Noon),
|
connector: Box::new(&Noon),
|
||||||
connector_name: types::Connector::Dummy,
|
connector_name: types::Connector::DummyConnector1,
|
||||||
get_token: types::api::GetToken::Connector,
|
get_token: types::api::GetToken::Connector,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,7 @@ impl utils::Connector for PayeezyTest {
|
|||||||
use router::connector::Payeezy;
|
use router::connector::Payeezy;
|
||||||
types::api::ConnectorData {
|
types::api::ConnectorData {
|
||||||
connector: Box::new(&Payeezy),
|
connector: Box::new(&Payeezy),
|
||||||
connector_name: types::Connector::Dummy,
|
connector_name: types::Connector::DummyConnector1,
|
||||||
get_token: types::api::GetToken::Connector,
|
get_token: types::api::GetToken::Connector,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user