1
1
pub mod transformers;
2
- use std:: fmt:: Debug ;
3
2
4
3
use api_models:: enums;
5
4
use base64:: Engine ;
6
- use common_utils:: request:: RequestContent ;
5
+ use common_utils:: {
6
+ request:: RequestContent ,
7
+ types:: { AmountConvertor , MinorUnit , MinorUnitForConnector } ,
8
+ } ;
7
9
use error_stack:: { report, ResultExt } ;
8
10
use masking:: PeekInterface ;
9
11
use router_env:: logger;
@@ -29,8 +31,18 @@ use crate::{
29
31
utils:: BytesExt ,
30
32
} ;
31
33
32
- #[ derive( Debug , Clone ) ]
33
- pub struct Klarna ;
34
+ #[ derive( Clone ) ]
35
+ pub struct Klarna {
36
+ amount_converter : & ' static ( dyn AmountConvertor < Output = MinorUnit > + Sync ) ,
37
+ }
38
+
39
+ impl Klarna {
40
+ pub fn new ( ) -> & ' static Self {
41
+ & Self {
42
+ amount_converter : & MinorUnitForConnector ,
43
+ }
44
+ }
45
+ }
34
46
35
47
impl ConnectorCommon for Klarna {
36
48
fn id ( & self ) -> & ' static str {
@@ -215,12 +227,12 @@ impl
215
227
req : & types:: PaymentsSessionRouterData ,
216
228
_connectors : & settings:: Connectors ,
217
229
) -> CustomResult < RequestContent , errors:: ConnectorError > {
218
- let connector_router_data = klarna:: KlarnaRouterData :: try_from ( (
219
- & self . get_currency_unit ( ) ,
230
+ let amount = connector_utils:: convert_amount (
231
+ self . amount_converter ,
232
+ req. request . minor_amount ,
220
233
req. request . currency ,
221
- req. request . amount ,
222
- req,
223
- ) ) ?;
234
+ ) ?;
235
+ let connector_router_data = klarna:: KlarnaRouterData :: from ( ( amount, req) ) ;
224
236
225
237
let connector_req = klarna:: KlarnaSessionRequest :: try_from ( & connector_router_data) ?;
226
238
// encode only for for urlencoded things.
@@ -342,12 +354,12 @@ impl
342
354
req : & types:: PaymentsCaptureRouterData ,
343
355
_connectors : & settings:: Connectors ,
344
356
) -> CustomResult < RequestContent , errors:: ConnectorError > {
345
- let connector_router_data = klarna:: KlarnaRouterData :: try_from ( (
346
- & self . get_currency_unit ( ) ,
357
+ let amount = connector_utils:: convert_amount (
358
+ self . amount_converter ,
359
+ req. request . minor_amount_to_capture ,
347
360
req. request . currency ,
348
- req. request . amount_to_capture ,
349
- req,
350
- ) ) ?;
361
+ ) ?;
362
+ let connector_router_data = klarna:: KlarnaRouterData :: from ( ( amount, req) ) ;
351
363
let connector_req = klarna:: KlarnaCaptureRequest :: try_from ( & connector_router_data) ?;
352
364
Ok ( RequestContent :: Json ( Box :: new ( connector_req) ) )
353
365
}
@@ -670,12 +682,12 @@ impl
670
682
req : & types:: PaymentsAuthorizeRouterData ,
671
683
_connectors : & settings:: Connectors ,
672
684
) -> CustomResult < RequestContent , errors:: ConnectorError > {
673
- let connector_router_data = klarna:: KlarnaRouterData :: try_from ( (
674
- & self . get_currency_unit ( ) ,
685
+ let amount = connector_utils:: convert_amount (
686
+ self . amount_converter ,
687
+ req. request . minor_amount ,
675
688
req. request . currency ,
676
- req. request . amount ,
677
- req,
678
- ) ) ?;
689
+ ) ?;
690
+ let connector_router_data = klarna:: KlarnaRouterData :: from ( ( amount, req) ) ;
679
691
let connector_req = klarna:: KlarnaPaymentsRequest :: try_from ( & connector_router_data) ?;
680
692
681
693
Ok ( RequestContent :: Json ( Box :: new ( connector_req) ) )
@@ -847,12 +859,12 @@ impl services::ConnectorIntegration<api::Execute, types::RefundsData, types::Ref
847
859
req : & types:: RefundsRouterData < api:: Execute > ,
848
860
_connectors : & settings:: Connectors ,
849
861
) -> CustomResult < RequestContent , errors:: ConnectorError > {
850
- let connector_router_data = klarna:: KlarnaRouterData :: try_from ( (
851
- & self . get_currency_unit ( ) ,
862
+ let amount = connector_utils:: convert_amount (
863
+ self . amount_converter ,
864
+ req. request . minor_refund_amount ,
852
865
req. request . currency ,
853
- req. request . refund_amount ,
854
- req,
855
- ) ) ?;
866
+ ) ?;
867
+ let connector_router_data = klarna:: KlarnaRouterData :: from ( ( amount, req) ) ;
856
868
let connector_req = klarna:: KlarnaRefundRequest :: try_from ( & connector_router_data) ?;
857
869
Ok ( RequestContent :: Json ( Box :: new ( connector_req) ) )
858
870
}
0 commit comments