Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions crates/hyperswitch_connectors/src/connectors/zsl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::{
Expand Down Expand Up @@ -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<Output = StringMinorUnit> + Sync),
}

impl Zsl {
pub fn new() -> &'static Self {
&Self {
amount_convertor: &StringMinorUnitForConnector,
}
}
}

impl api::Payment for Zsl {}
impl api::PaymentSession for Zsl {}
Expand Down Expand Up @@ -163,12 +175,13 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
req: &PaymentsAuthorizeRouterData,
_connectors: &Connectors,
) -> CustomResult<RequestContent, errors::ConnectorError> {
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)))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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},
Expand All @@ -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 _,
},
};
Expand All @@ -32,16 +32,13 @@ mod zsl_version {
}

pub struct ZslRouterData<T> {
pub amount: String,
pub amount: StringMinorUnit,
pub router_data: T,
}

impl<T> TryFrom<(&api::CurrencyUnit, enums::Currency, i64, T)> for ZslRouterData<T> {
impl<T> TryFrom<(StringMinorUnit, T)> for ZslRouterData<T> {
type Error = error_stack::Report<errors::ConnectorError>;
fn try_from(
(currency_unit, currency, txn_amount, item): (&api::CurrencyUnit, enums::Currency, i64, T),
) -> Result<Self, Self::Error> {
let amount = get_amount_as_string(currency_unit, txn_amount, currency)?;
fn try_from((amount, item): (StringMinorUnit, T)) -> Result<Self, Self::Error> {
Ok(Self {
amount,
router_data: item,
Expand Down Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion crates/router/src/types/api/connector_mapping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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())))
}
Expand Down
2 changes: 1 addition & 1 deletion crates/router/src/types/api/feature_matrix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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())))
}
Expand Down
2 changes: 1 addition & 1 deletion crates/router/tests/connectors/zsl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down