mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	refactor(adyen): use enums instead of strings for statuses (#320)
This commit is contained in:
		| @ -73,6 +73,25 @@ struct AdyenBrowserInfo { | |||||||
|     java_enabled: bool, |     java_enabled: bool, | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[derive(Debug, Clone, Serialize, Deserialize)] | ||||||
|  | pub enum AdyenStatus { | ||||||
|  |     Authorised, | ||||||
|  |     Refused, | ||||||
|  |     Cancelled, | ||||||
|  |     RedirectShopper, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | impl From<AdyenStatus> for storage_enums::AttemptStatus { | ||||||
|  |     fn from(item: AdyenStatus) -> Self { | ||||||
|  |         match item { | ||||||
|  |             AdyenStatus::Authorised => Self::Charged, | ||||||
|  |             AdyenStatus::Refused => Self::Failure, | ||||||
|  |             AdyenStatus::Cancelled => Self::Voided, | ||||||
|  |             AdyenStatus::RedirectShopper => Self::AuthenticationPending, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| #[derive(Debug, Serialize, Deserialize, Eq, PartialEq)] | #[derive(Debug, Serialize, Deserialize, Eq, PartialEq)] | ||||||
| pub struct AdyenRedirectRequest { | pub struct AdyenRedirectRequest { | ||||||
|     pub details: AdyenRedirectRequestTypes, |     pub details: AdyenRedirectRequestTypes, | ||||||
| @ -105,7 +124,7 @@ pub struct AdyenThreeDS { | |||||||
|     pub result_code: Option<String>, |     pub result_code: Option<String>, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | #[derive(Debug, Clone, Deserialize)] | ||||||
| #[serde(untagged)] | #[serde(untagged)] | ||||||
| pub enum AdyenPaymentResponse { | pub enum AdyenPaymentResponse { | ||||||
|     AdyenResponse(AdyenResponse), |     AdyenResponse(AdyenResponse), | ||||||
| @ -116,17 +135,17 @@ pub enum AdyenPaymentResponse { | |||||||
| #[serde(rename_all = "camelCase")] | #[serde(rename_all = "camelCase")] | ||||||
| pub struct AdyenResponse { | pub struct AdyenResponse { | ||||||
|     psp_reference: String, |     psp_reference: String, | ||||||
|     result_code: String, |     result_code: AdyenStatus, | ||||||
|     amount: Option<Amount>, |     amount: Option<Amount>, | ||||||
|     merchant_reference: String, |     merchant_reference: String, | ||||||
|     refusal_reason: Option<String>, |     refusal_reason: Option<String>, | ||||||
|     refusal_reason_code: Option<String>, |     refusal_reason_code: Option<String>, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | #[derive(Debug, Clone, Deserialize)] | ||||||
| #[serde(rename_all = "camelCase")] | #[serde(rename_all = "camelCase")] | ||||||
| pub struct AdyenRedirectionResponse { | pub struct AdyenRedirectionResponse { | ||||||
|     result_code: String, |     result_code: AdyenStatus, | ||||||
|     action: AdyenRedirectionAction, |     action: AdyenRedirectionAction, | ||||||
|     refusal_reason: Option<String>, |     refusal_reason: Option<String>, | ||||||
|     refusal_reason_code: Option<String>, |     refusal_reason_code: Option<String>, | ||||||
| @ -455,16 +474,15 @@ pub fn get_adyen_response( | |||||||
|     ), |     ), | ||||||
|     errors::ParsingError, |     errors::ParsingError, | ||||||
| > { | > { | ||||||
|     let result = response.result_code; |     let status = match response.result_code { | ||||||
|     let status = match result.as_str() { |         AdyenStatus::Authorised => { | ||||||
|         "Authorised" => { |  | ||||||
|             if is_capture_manual { |             if is_capture_manual { | ||||||
|                 storage_enums::AttemptStatus::Authorized |                 storage_enums::AttemptStatus::Authorized | ||||||
|             } else { |             } else { | ||||||
|                 storage_enums::AttemptStatus::Charged |                 storage_enums::AttemptStatus::Charged | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         "Refused" => storage_enums::AttemptStatus::Failure, |         AdyenStatus::Refused => storage_enums::AttemptStatus::Failure, | ||||||
|         _ => storage_enums::AttemptStatus::Pending, |         _ => storage_enums::AttemptStatus::Pending, | ||||||
|     }; |     }; | ||||||
|     let error = if response.refusal_reason.is_some() || response.refusal_reason_code.is_some() { |     let error = if response.refusal_reason.is_some() || response.refusal_reason_code.is_some() { | ||||||
| @ -501,14 +519,7 @@ pub fn get_redirection_response( | |||||||
|     ), |     ), | ||||||
|     errors::ParsingError, |     errors::ParsingError, | ||||||
| > { | > { | ||||||
|     let result = response.result_code; |     let status = response.result_code.into(); | ||||||
|     let status = match result.as_str() { |  | ||||||
|         "Authorised" => storage_enums::AttemptStatus::Charged, |  | ||||||
|         "Refused" => storage_enums::AttemptStatus::Failure, |  | ||||||
|         "Cancelled" => storage_enums::AttemptStatus::Failure, |  | ||||||
|         "RedirectShopper" => storage_enums::AttemptStatus::AuthenticationPending, |  | ||||||
|         _ => storage_enums::AttemptStatus::Pending, |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     let error = if response.refusal_reason.is_some() || response.refusal_reason_code.is_some() { |     let error = if response.refusal_reason.is_some() || response.refusal_reason_code.is_some() { | ||||||
|         Some(types::ErrorResponse { |         Some(types::ErrorResponse { | ||||||
| @ -795,10 +806,10 @@ impl From<AdyenNotificationRequestItemWH> for AdyenResponse { | |||||||
|         Self { |         Self { | ||||||
|             psp_reference: notif.psp_reference, |             psp_reference: notif.psp_reference, | ||||||
|             merchant_reference: notif.merchant_reference, |             merchant_reference: notif.merchant_reference, | ||||||
|             result_code: String::from(match notif.success.as_str() { |             result_code: match notif.success.as_str() { | ||||||
|                 "true" => "Authorised", |                 "true" => AdyenStatus::Authorised, | ||||||
|                 _ => "Refused", |                 _ => AdyenStatus::Refused, | ||||||
|             }), |             }, | ||||||
|             amount: Some(Amount { |             amount: Some(Amount { | ||||||
|                 value: notif.amount.value, |                 value: notif.amount.value, | ||||||
|                 currency: notif.amount.currency, |                 currency: notif.amount.currency, | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Prasunna Soppa
					Prasunna Soppa