fix(connector): Fix Amount conversion in request & response for Rapyd connector (#11046)

This commit is contained in:
Shubhodip pal
2026-03-05 17:52:21 +05:30
committed by GitHub
parent bd8c6b2efe
commit beef6cedd0
2 changed files with 16 additions and 16 deletions

View File

@@ -11,7 +11,7 @@ use common_utils::{
ext_traits::{ByteSliceExt, BytesExt, Encode, StringExt},
request::{Method, Request, RequestBuilder, RequestContent},
types::{
AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector, StringMinorUnit,
AmountConvertor, StringMajorUnit, StringMajorUnitForConnector, StringMinorUnit,
StringMinorUnitForConnector,
},
};
@@ -62,13 +62,13 @@ use crate::{
#[derive(Clone)]
pub struct Rapyd {
amount_converter: &'static (dyn AmountConvertor<Output = FloatMajorUnit> + Sync),
amount_converter: &'static (dyn AmountConvertor<Output = StringMajorUnit> + Sync),
amount_converter_webhooks: &'static (dyn AmountConvertor<Output = StringMinorUnit> + Sync),
}
impl Rapyd {
pub fn new() -> &'static Self {
&Self {
amount_converter: &FloatMajorUnitForConnector,
amount_converter: &StringMajorUnitForConnector,
amount_converter_webhooks: &StringMinorUnitForConnector,
}
}

View File

@@ -2,7 +2,7 @@ use common_enums::enums;
use common_utils::{
ext_traits::OptionExt,
request::Method,
types::{FloatMajorUnit, MinorUnit},
types::{FloatMajorUnit, MinorUnit, StringMajorUnit},
};
use error_stack::ResultExt;
use hyperswitch_domain_models::{
@@ -26,12 +26,12 @@ use crate::{
#[derive(Debug, Serialize)]
pub struct RapydRouterData<T> {
pub amount: FloatMajorUnit,
pub amount: StringMajorUnit,
pub router_data: T,
}
impl<T> From<(FloatMajorUnit, T)> for RapydRouterData<T> {
fn from((amount, router_data): (FloatMajorUnit, T)) -> Self {
impl<T> From<(StringMajorUnit, T)> for RapydRouterData<T> {
fn from((amount, router_data): (StringMajorUnit, T)) -> Self {
Self {
amount,
router_data,
@@ -41,7 +41,7 @@ impl<T> From<(FloatMajorUnit, T)> for RapydRouterData<T> {
#[derive(Default, Debug, Serialize)]
pub struct RapydPaymentsRequest {
pub amount: FloatMajorUnit,
pub amount: StringMajorUnit,
pub currency: enums::Currency,
pub payment_method: PaymentMethod,
pub payment_method_options: Option<PaymentMethodOptions>,
@@ -183,7 +183,7 @@ impl TryFrom<&RapydRouterData<&types::PaymentsAuthorizeRouterData>> for RapydPay
))?;
let return_url = item.router_data.request.get_router_return_url()?;
Ok(Self {
amount: item.amount,
amount: item.amount.clone(),
currency: item.router_data.request.currency,
payment_method,
capture,
@@ -287,11 +287,11 @@ pub enum NextAction {
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct ResponseData {
pub id: String,
pub amount: i64,
pub amount: FloatMajorUnit,
pub status: RapydPaymentStatus,
pub next_action: NextAction,
pub redirect_url: Option<String>,
pub original_amount: Option<i64>,
pub original_amount: Option<FloatMajorUnit>,
pub is_partial: Option<bool>,
pub currency_code: Option<enums::Currency>,
pub country_code: Option<String>,
@@ -323,7 +323,7 @@ pub struct DisputeResponseData {
#[derive(Default, Debug, Serialize)]
pub struct RapydRefundRequest {
pub payment: String,
pub amount: Option<FloatMajorUnit>,
pub amount: Option<StringMajorUnit>,
pub currency: Option<enums::Currency>,
}
@@ -336,7 +336,7 @@ impl<F> TryFrom<&RapydRouterData<&types::RefundsRouterData<F>>> for RapydRefundR
.request
.connector_transaction_id
.to_string(),
amount: Some(item.amount),
amount: Some(item.amount.clone()),
currency: Some(item.router_data.request.currency),
})
}
@@ -373,7 +373,7 @@ pub struct RefundResponseData {
//Some field related to foreign exchange and split payment can be added as and when implemented
pub id: String,
pub payment: String,
pub amount: i64,
pub amount: FloatMajorUnit,
pub currency: enums::Currency,
pub status: RefundStatus,
pub created_at: Option<i64>,
@@ -428,7 +428,7 @@ impl TryFrom<RefundsResponseRouterData<RSync, RefundResponse>> for types::Refund
#[derive(Debug, Serialize, Clone)]
pub struct CaptureRequest {
amount: Option<FloatMajorUnit>,
amount: Option<StringMajorUnit>,
receipt_email: Option<Secret<String>>,
statement_descriptor: Option<String>,
}
@@ -439,7 +439,7 @@ impl TryFrom<&RapydRouterData<&types::PaymentsCaptureRouterData>> for CaptureReq
item: &RapydRouterData<&types::PaymentsCaptureRouterData>,
) -> Result<Self, Self::Error> {
Ok(Self {
amount: Some(item.amount),
amount: Some(item.amount.clone()),
receipt_email: None,
statement_descriptor: None,
})