@@ -2607,21 +2607,31 @@ impl<F> TryFrom<&BankOfAmericaRouterData<&types::RefundsRouterData<F>>>
2607
2607
}
2608
2608
}
2609
2609
2610
- impl From < BankofamericaRefundStatus > for enums:: RefundStatus {
2611
- fn from ( item : BankofamericaRefundStatus ) -> Self {
2612
- match item {
2610
+ impl From < BankOfAmericaRefundResponse > for enums:: RefundStatus {
2611
+ fn from ( item : BankOfAmericaRefundResponse ) -> Self {
2612
+ let error_reason = item
2613
+ . error_information
2614
+ . and_then ( |error_info| error_info. reason ) ;
2615
+ match item. status {
2613
2616
BankofamericaRefundStatus :: Succeeded | BankofamericaRefundStatus :: Transmitted => {
2614
2617
Self :: Success
2615
2618
}
2616
2619
BankofamericaRefundStatus :: Cancelled
2617
2620
| BankofamericaRefundStatus :: Failed
2618
2621
| BankofamericaRefundStatus :: Voided => Self :: Failure ,
2619
2622
BankofamericaRefundStatus :: Pending => Self :: Pending ,
2623
+ BankofamericaRefundStatus :: TwoZeroOne => {
2624
+ if error_reason == Some ( "PROCESSOR_DECLINED" . to_string ( ) ) {
2625
+ Self :: Failure
2626
+ } else {
2627
+ Self :: Pending
2628
+ }
2629
+ }
2620
2630
}
2621
2631
}
2622
2632
}
2623
2633
2624
- #[ derive( Debug , Deserialize , Serialize ) ]
2634
+ #[ derive( Debug , Clone , Deserialize , Serialize ) ]
2625
2635
#[ serde( rename_all = "camelCase" ) ]
2626
2636
pub struct BankOfAmericaRefundResponse {
2627
2637
id : String ,
@@ -2636,19 +2646,19 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, BankOfAmericaRefundR
2636
2646
fn try_from (
2637
2647
item : types:: RefundsResponseRouterData < api:: Execute , BankOfAmericaRefundResponse > ,
2638
2648
) -> Result < Self , Self :: Error > {
2639
- let refund_status = enums:: RefundStatus :: from ( item. response . status . clone ( ) ) ;
2649
+ let refund_status = enums:: RefundStatus :: from ( item. response . clone ( ) ) ;
2640
2650
let response = if utils:: is_refund_failure ( refund_status) {
2641
2651
Err ( types:: ErrorResponse :: foreign_from ( (
2642
2652
& item. response . error_information ,
2643
2653
& None ,
2644
2654
None ,
2645
2655
item. http_code ,
2646
- item. response . id . clone ( ) ,
2656
+ item. response . id ,
2647
2657
) ) )
2648
2658
} else {
2649
2659
Ok ( types:: RefundsResponseData {
2650
2660
connector_refund_id : item. response . id ,
2651
- refund_status : enums :: RefundStatus :: from ( item . response . status ) ,
2661
+ refund_status,
2652
2662
} )
2653
2663
} ;
2654
2664
@@ -2668,6 +2678,8 @@ pub enum BankofamericaRefundStatus {
2668
2678
Pending ,
2669
2679
Voided ,
2670
2680
Cancelled ,
2681
+ #[ serde( rename = "201" ) ]
2682
+ TwoZeroOne ,
2671
2683
}
2672
2684
2673
2685
#[ derive( Debug , Deserialize , Serialize ) ]
@@ -2697,8 +2709,26 @@ impl TryFrom<types::RefundsResponseRouterData<api::RSync, BankOfAmericaRsyncResp
2697
2709
. and_then ( |application_information| application_information. status )
2698
2710
{
2699
2711
Some ( status) => {
2700
- let refund_status: common_enums:: RefundStatus =
2701
- enums:: RefundStatus :: from ( status. clone ( ) ) ;
2712
+ let error_reason = item
2713
+ . response
2714
+ . error_information
2715
+ . clone ( )
2716
+ . and_then ( |error_info| error_info. reason ) ;
2717
+ let refund_status = match status {
2718
+ BankofamericaRefundStatus :: Succeeded
2719
+ | BankofamericaRefundStatus :: Transmitted => enums:: RefundStatus :: Success ,
2720
+ BankofamericaRefundStatus :: Cancelled
2721
+ | BankofamericaRefundStatus :: Failed
2722
+ | BankofamericaRefundStatus :: Voided => enums:: RefundStatus :: Failure ,
2723
+ BankofamericaRefundStatus :: Pending => enums:: RefundStatus :: Pending ,
2724
+ BankofamericaRefundStatus :: TwoZeroOne => {
2725
+ if error_reason == Some ( "PROCESSOR_DECLINED" . to_string ( ) ) {
2726
+ enums:: RefundStatus :: Failure
2727
+ } else {
2728
+ enums:: RefundStatus :: Pending
2729
+ }
2730
+ }
2731
+ } ;
2702
2732
if utils:: is_refund_failure ( refund_status) {
2703
2733
if status == BankofamericaRefundStatus :: Voided {
2704
2734
Err ( types:: ErrorResponse :: foreign_from ( (
0 commit comments