mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +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