Skip to content

Commit

Permalink
fix(connector): [NMI] Added enum for Void Reason (#7221)
Browse files Browse the repository at this point in the history
Co-authored-by: Debarshi Gupta <[email protected]>
  • Loading branch information
Debarshi-Gupta and Debarshi Gupta authored Feb 24, 2025
1 parent 3ae4ce3 commit 9032165
Showing 1 changed file with 31 additions and 7 deletions.
38 changes: 31 additions & 7 deletions crates/router/src/connector/nmi/transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -783,19 +783,43 @@ pub struct NmiCancelRequest {
pub transaction_type: TransactionType,
pub security_key: Secret<String>,
pub transactionid: String,
pub void_reason: Option<String>,
pub void_reason: NmiVoidReason,
}

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum NmiVoidReason {
Fraud,
UserCancel,
IccRejected,
IccCardRemoved,
IccNoConfirmation,
PosTimeout,
}

impl TryFrom<&types::PaymentsCancelRouterData> for NmiCancelRequest {
type Error = Error;
fn try_from(item: &types::PaymentsCancelRouterData) -> Result<Self, Self::Error> {
let auth = NmiAuthType::try_from(&item.connector_auth_type)?;
Ok(Self {
transaction_type: TransactionType::Void,
security_key: auth.api_key,
transactionid: item.request.connector_transaction_id.clone(),
void_reason: item.request.cancellation_reason.clone(),
})
match &item.request.cancellation_reason {
Some(cancellation_reason) => {
let void_reason: NmiVoidReason = serde_json::from_str(&format!("\"{}\"", cancellation_reason))
.map_err(|_| errors::ConnectorError::NotSupported {
message: format!("Json deserialise error: unknown variant `{}` expected to be one of `fraud`, `user_cancel`, `icc_rejected`, `icc_card_removed`, `icc_no_confirmation`, `pos_timeout`. This cancellation_reason", cancellation_reason),
connector: "nmi"
})?;
Ok(Self {
transaction_type: TransactionType::Void,
security_key: auth.api_key,
transactionid: item.request.connector_transaction_id.clone(),
void_reason,
})
}
None => Err(errors::ConnectorError::MissingRequiredField {
field_name: "cancellation_reason",
}
.into()),
}
}
}

Expand Down

0 comments on commit 9032165

Please sign in to comment.