mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-11-01 02:57:02 +08:00 
			
		
		
		
	feat(connector): [OpenNode] Currency Unit Conversion (#2645)
This commit is contained in:
		| @ -72,6 +72,10 @@ impl ConnectorCommon for Opennode { | |||||||
|         "opennode" |         "opennode" | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     fn get_currency_unit(&self) -> api::CurrencyUnit { | ||||||
|  |         api::CurrencyUnit::Minor | ||||||
|  |     } | ||||||
|  |  | ||||||
|     fn common_get_content_type(&self) -> &'static str { |     fn common_get_content_type(&self) -> &'static str { | ||||||
|         "application/json" |         "application/json" | ||||||
|     } |     } | ||||||
| @ -169,7 +173,13 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P | |||||||
|         &self, |         &self, | ||||||
|         req: &types::PaymentsAuthorizeRouterData, |         req: &types::PaymentsAuthorizeRouterData, | ||||||
|     ) -> CustomResult<Option<types::RequestBody>, errors::ConnectorError> { |     ) -> CustomResult<Option<types::RequestBody>, 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( |         let opennode_req = types::RequestBody::log_and_get_request_body( | ||||||
|             &req_obj, |             &req_obj, | ||||||
|             Encode::<opennode::OpennodePaymentsRequest>::encode_to_string_of_json, |             Encode::<opennode::OpennodePaymentsRequest>::encode_to_string_of_json, | ||||||
|  | |||||||
| @ -10,6 +10,37 @@ use crate::{ | |||||||
|     types::{self, api, storage::enums}, |     types::{self, api, storage::enums}, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | #[derive(Debug, Serialize)] | ||||||
|  | pub struct OpennodeRouterData<T> { | ||||||
|  |     pub amount: i64, | ||||||
|  |     pub router_data: T, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | impl<T> | ||||||
|  |     TryFrom<( | ||||||
|  |         &types::api::CurrencyUnit, | ||||||
|  |         types::storage::enums::Currency, | ||||||
|  |         i64, | ||||||
|  |         T, | ||||||
|  |     )> for OpennodeRouterData<T> | ||||||
|  | { | ||||||
|  |     type Error = error_stack::Report<errors::ConnectorError>; | ||||||
|  |  | ||||||
|  |     fn try_from( | ||||||
|  |         (_currency_unit, _currency, amount, router_data): ( | ||||||
|  |             &types::api::CurrencyUnit, | ||||||
|  |             types::storage::enums::Currency, | ||||||
|  |             i64, | ||||||
|  |             T, | ||||||
|  |         ), | ||||||
|  |     ) -> Result<Self, Self::Error> { | ||||||
|  |         Ok(Self { | ||||||
|  |             amount, | ||||||
|  |             router_data, | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| //TODO: Fill the struct with respective fields | //TODO: Fill the struct with respective fields | ||||||
| #[derive(Default, Debug, Serialize, Eq, PartialEq)] | #[derive(Default, Debug, Serialize, Eq, PartialEq)] | ||||||
| pub struct OpennodePaymentsRequest { | pub struct OpennodePaymentsRequest { | ||||||
| @ -22,9 +53,11 @@ pub struct OpennodePaymentsRequest { | |||||||
|     order_id: String, |     order_id: String, | ||||||
| } | } | ||||||
|  |  | ||||||
| impl TryFrom<&types::PaymentsAuthorizeRouterData> for OpennodePaymentsRequest { | impl TryFrom<&OpennodeRouterData<&types::PaymentsAuthorizeRouterData>> for OpennodePaymentsRequest { | ||||||
|     type Error = error_stack::Report<errors::ConnectorError>; |     type Error = error_stack::Report<errors::ConnectorError>; | ||||||
|     fn try_from(item: &types::PaymentsAuthorizeRouterData) -> Result<Self, Self::Error> { |     fn try_from( | ||||||
|  |         item: &OpennodeRouterData<&types::PaymentsAuthorizeRouterData>, | ||||||
|  |     ) -> Result<Self, Self::Error> { | ||||||
|         get_crypto_specific_payment_data(item) |         get_crypto_specific_payment_data(item) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -146,11 +179,13 @@ pub struct OpennodeRefundRequest { | |||||||
|     pub amount: i64, |     pub amount: i64, | ||||||
| } | } | ||||||
|  |  | ||||||
| impl<F> TryFrom<&types::RefundsRouterData<F>> for OpennodeRefundRequest { | impl<F> TryFrom<&OpennodeRouterData<&types::RefundsRouterData<F>>> for OpennodeRefundRequest { | ||||||
|     type Error = error_stack::Report<errors::ConnectorError>; |     type Error = error_stack::Report<errors::ConnectorError>; | ||||||
|     fn try_from(item: &types::RefundsRouterData<F>) -> Result<Self, Self::Error> { |     fn try_from( | ||||||
|  |         item: &OpennodeRouterData<&types::RefundsRouterData<F>>, | ||||||
|  |     ) -> Result<Self, Self::Error> { | ||||||
|         Ok(Self { |         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( | fn get_crypto_specific_payment_data( | ||||||
|     item: &types::PaymentsAuthorizeRouterData, |     item: &OpennodeRouterData<&types::PaymentsAuthorizeRouterData>, | ||||||
| ) -> Result<OpennodePaymentsRequest, error_stack::Report<errors::ConnectorError>> { | ) -> Result<OpennodePaymentsRequest, error_stack::Report<errors::ConnectorError>> { | ||||||
|     let amount = item.request.amount; |     let amount = item.amount; | ||||||
|     let currency = item.request.currency.to_string(); |     let currency = item.router_data.request.currency.to_string(); | ||||||
|     let description = item.get_description()?; |     let description = item.router_data.get_description()?; | ||||||
|     let auto_settle = true; |     let auto_settle = true; | ||||||
|     let success_url = item.get_return_url()?; |     let success_url = item.router_data.get_return_url()?; | ||||||
|     let callback_url = item.request.get_webhook_url()?; |     let callback_url = item.router_data.request.get_webhook_url()?; | ||||||
|  |     let order_id = item.router_data.connector_request_reference_id.clone(); | ||||||
|  |  | ||||||
|     Ok(OpennodePaymentsRequest { |     Ok(OpennodePaymentsRequest { | ||||||
|         amount, |         amount, | ||||||
| @ -238,7 +274,7 @@ fn get_crypto_specific_payment_data( | |||||||
|         auto_settle, |         auto_settle, | ||||||
|         success_url, |         success_url, | ||||||
|         callback_url, |         callback_url, | ||||||
|         order_id: item.connector_request_reference_id.clone(), |         order_id, | ||||||
|     }) |     }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Seemebadnekai
					Seemebadnekai