diff --git a/crates/hyperswitch_connectors/src/connectors/zsl.rs b/crates/hyperswitch_connectors/src/connectors/zsl.rs index 1defc874c84..15cb8532bd7 100644 --- a/crates/hyperswitch_connectors/src/connectors/zsl.rs +++ b/crates/hyperswitch_connectors/src/connectors/zsl.rs @@ -8,6 +8,7 @@ use common_utils::{ errors::CustomResult, ext_traits::{BytesExt, ValueExt}, request::{Method, Request, RequestBuilder, RequestContent}, + types::{AmountConvertor, StringMinorUnit, StringMinorUnitForConnector}, }; use error_stack::ResultExt; use hyperswitch_domain_models::{ @@ -51,10 +52,21 @@ use transformers::{self as zsl, get_status}; use crate::{ constants::headers, types::{RefreshTokenRouterData, ResponseRouterData}, + utils::convert_amount, }; #[derive(Debug, Clone)] -pub struct Zsl; +pub struct Zsl { + amount_convertor: &'static (dyn AmountConvertor + Sync), +} + +impl Zsl { + pub fn new() -> &'static Self { + &Self { + amount_convertor: &StringMinorUnitForConnector, + } + } +} impl api::Payment for Zsl {} impl api::PaymentSession for Zsl {} @@ -163,12 +175,13 @@ impl ConnectorIntegration CustomResult { - let connector_router_data = zsl::ZslRouterData::try_from(( - &self.get_currency_unit(), + let amount = convert_amount( + self.amount_convertor, + req.request.minor_amount, req.request.currency, - req.request.amount, - req, - ))?; + )?; + + let connector_router_data = zsl::ZslRouterData::try_from((amount, req))?; let connector_req = zsl::ZslPaymentsRequest::try_from(&connector_router_data)?; Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) } diff --git a/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs b/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs index d4dab880f70..186f672eddf 100644 --- a/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/zsl/transformers.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use base64::Engine; use common_enums::enums; -use common_utils::{crypto::GenerateDigest, date_time, pii::Email, request::Method}; +use common_utils::{crypto::GenerateDigest, date_time, pii::Email, request::Method, types::{StringMinorUnit, StringMinorUnitForConnector, AmountConvertor, MinorUnit}}; use error_stack::ResultExt; use hyperswitch_domain_models::{ payment_method_data::{BankTransferData, PaymentMethodData}, @@ -19,7 +19,7 @@ use serde::{Deserialize, Serialize}; use crate::{ types::ResponseRouterData, utils::{ - get_amount_as_string, get_unimplemented_payment_method_error_message, + convert_amount, get_unimplemented_payment_method_error_message, PaymentsAuthorizeRequestData, RouterData as _, }, }; @@ -32,16 +32,13 @@ mod zsl_version { } pub struct ZslRouterData { - pub amount: String, + pub amount: StringMinorUnit, pub router_data: T, } -impl TryFrom<(&api::CurrencyUnit, enums::Currency, i64, T)> for ZslRouterData { +impl TryFrom<(StringMinorUnit, T)> for ZslRouterData { type Error = error_stack::Report; - fn try_from( - (currency_unit, currency, txn_amount, item): (&api::CurrencyUnit, enums::Currency, i64, T), - ) -> Result { - let amount = get_amount_as_string(currency_unit, txn_amount, currency)?; + fn try_from((amount, item): (StringMinorUnit, T)) -> Result { Ok(Self { amount, router_data: item, @@ -201,7 +198,7 @@ impl TryFrom<&ZslRouterData<&types::PaymentsAuthorizeRouterData>> for ZslPayment let mer_txn_date = date_time::format_date(date_time::now(), date_time::DateFormat::YYYYMMDDHHmmss) .change_context(errors::ConnectorError::RequestEncodingFailed)?; - let txn_amt = item.amount.clone(); + let txn_amt = item.amount.to_string(); let ccy = item.router_data.request.currency; let mer_ref = item.router_data.connector_request_reference_id.clone(); let signature = calculate_signature( diff --git a/crates/router/src/types/api/connector_mapping.rs b/crates/router/src/types/api/connector_mapping.rs index b4de4ff3ab7..b71535bd188 100644 --- a/crates/router/src/types/api/connector_mapping.rs +++ b/crates/router/src/types/api/connector_mapping.rs @@ -468,7 +468,7 @@ impl ConnectorData { // Ok(Box::new(connector::Wellsfargopayout::new())) // } enums::Connector::Zen => Ok(ConnectorEnum::Old(Box::new(&connector::Zen))), - enums::Connector::Zsl => Ok(ConnectorEnum::Old(Box::new(&connector::Zsl))), + enums::Connector::Zsl => Ok(ConnectorEnum::Old(Box::new(connector::Zsl::new()))), enums::Connector::Plaid => { Ok(ConnectorEnum::Old(Box::new(connector::Plaid::new()))) } diff --git a/crates/router/src/types/api/feature_matrix.rs b/crates/router/src/types/api/feature_matrix.rs index e4ba354aac5..197980172b9 100644 --- a/crates/router/src/types/api/feature_matrix.rs +++ b/crates/router/src/types/api/feature_matrix.rs @@ -386,7 +386,7 @@ impl FeatureMatrixConnectorData { // Ok(Box::new(connector::Wellsfargopayout::new())) // } enums::Connector::Zen => Ok(ConnectorEnum::Old(Box::new(&connector::Zen))), - enums::Connector::Zsl => Ok(ConnectorEnum::Old(Box::new(&connector::Zsl))), + enums::Connector::Zsl => Ok(ConnectorEnum::Old(Box::new(connector::Zsl::new()))), enums::Connector::Plaid => { Ok(ConnectorEnum::Old(Box::new(connector::Plaid::new()))) } diff --git a/crates/router/tests/connectors/zsl.rs b/crates/router/tests/connectors/zsl.rs index a0c1c4ca6a5..1474e814134 100644 --- a/crates/router/tests/connectors/zsl.rs +++ b/crates/router/tests/connectors/zsl.rs @@ -9,7 +9,7 @@ impl utils::Connector for ZslTest { fn get_data(&self) -> types::api::ConnectorData { use router::connector::Zsl; utils::construct_connector_data_old( - Box::new(&Zsl), + Box::new(Zsl::new()), types::Connector::Adyen, // Added as Dummy connector as template code is added for future usage types::api::GetToken::Connector,