diff --git a/crates/router/src/connector/opennode.rs b/crates/router/src/connector/opennode.rs index 6fad0f4720..07d33382a2 100644 --- a/crates/router/src/connector/opennode.rs +++ b/crates/router/src/connector/opennode.rs @@ -72,6 +72,10 @@ impl ConnectorCommon for Opennode { "opennode" } + fn get_currency_unit(&self) -> api::CurrencyUnit { + api::CurrencyUnit::Minor + } + fn common_get_content_type(&self) -> &'static str { "application/json" } @@ -169,7 +173,13 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { - let req_obj = opennode::OpennodePaymentsRequest::try_from(req)?; + let connector_router_data = opennode::OpennodeRouterData::try_from(( + &self.get_currency_unit(), + req.request.currency, + req.request.amount, + req, + ))?; + let req_obj = opennode::OpennodePaymentsRequest::try_from(&connector_router_data)?; let opennode_req = types::RequestBody::log_and_get_request_body( &req_obj, Encode::::encode_to_string_of_json, diff --git a/crates/router/src/connector/opennode/transformers.rs b/crates/router/src/connector/opennode/transformers.rs index b367012ca7..794fc85734 100644 --- a/crates/router/src/connector/opennode/transformers.rs +++ b/crates/router/src/connector/opennode/transformers.rs @@ -10,6 +10,37 @@ use crate::{ types::{self, api, storage::enums}, }; +#[derive(Debug, Serialize)] +pub struct OpennodeRouterData { + pub amount: i64, + pub router_data: T, +} + +impl + TryFrom<( + &types::api::CurrencyUnit, + types::storage::enums::Currency, + i64, + T, + )> for OpennodeRouterData +{ + type Error = error_stack::Report; + + fn try_from( + (_currency_unit, _currency, amount, router_data): ( + &types::api::CurrencyUnit, + types::storage::enums::Currency, + i64, + T, + ), + ) -> Result { + Ok(Self { + amount, + router_data, + }) + } +} + //TODO: Fill the struct with respective fields #[derive(Default, Debug, Serialize, Eq, PartialEq)] pub struct OpennodePaymentsRequest { @@ -22,9 +53,11 @@ pub struct OpennodePaymentsRequest { order_id: String, } -impl TryFrom<&types::PaymentsAuthorizeRouterData> for OpennodePaymentsRequest { +impl TryFrom<&OpennodeRouterData<&types::PaymentsAuthorizeRouterData>> for OpennodePaymentsRequest { type Error = error_stack::Report; - fn try_from(item: &types::PaymentsAuthorizeRouterData) -> Result { + fn try_from( + item: &OpennodeRouterData<&types::PaymentsAuthorizeRouterData>, + ) -> Result { get_crypto_specific_payment_data(item) } } @@ -146,11 +179,13 @@ pub struct OpennodeRefundRequest { pub amount: i64, } -impl TryFrom<&types::RefundsRouterData> for OpennodeRefundRequest { +impl TryFrom<&OpennodeRouterData<&types::RefundsRouterData>> for OpennodeRefundRequest { type Error = error_stack::Report; - fn try_from(item: &types::RefundsRouterData) -> Result { + fn try_from( + item: &OpennodeRouterData<&types::RefundsRouterData>, + ) -> Result { Ok(Self { - amount: item.request.refund_amount, + amount: item.router_data.request.refund_amount, }) } } @@ -222,14 +257,15 @@ pub struct OpennodeErrorResponse { } fn get_crypto_specific_payment_data( - item: &types::PaymentsAuthorizeRouterData, + item: &OpennodeRouterData<&types::PaymentsAuthorizeRouterData>, ) -> Result> { - let amount = item.request.amount; - let currency = item.request.currency.to_string(); - let description = item.get_description()?; + let amount = item.amount; + let currency = item.router_data.request.currency.to_string(); + let description = item.router_data.get_description()?; let auto_settle = true; - let success_url = item.get_return_url()?; - let callback_url = item.request.get_webhook_url()?; + let success_url = item.router_data.get_return_url()?; + let callback_url = item.router_data.request.get_webhook_url()?; + let order_id = item.router_data.connector_request_reference_id.clone(); Ok(OpennodePaymentsRequest { amount, @@ -238,7 +274,7 @@ fn get_crypto_specific_payment_data( auto_settle, success_url, callback_url, - order_id: item.connector_request_reference_id.clone(), + order_id, }) }