fix: Error Mapping for Bluensap & Card Number for Airwallex (#686)

This commit is contained in:
SamraatBansal
2023-02-28 18:31:54 +05:30
committed by GitHub
parent bfca26d9fd
commit 35a74baf55
3 changed files with 38 additions and 14 deletions

View File

@ -93,7 +93,9 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for AirwallexPaymentsRequest {
})); }));
Ok(AirwallexPaymentMethod::Card(AirwallexCard { Ok(AirwallexPaymentMethod::Card(AirwallexCard {
card: AirwallexCardDetails { card: AirwallexCardDetails {
number: ccard.card_number, number: ccard
.card_number
.map(|card| card.split_whitespace().collect()),
expiry_month: ccard.card_exp_month.clone(), expiry_month: ccard.card_exp_month.clone(),
expiry_year: ccard.card_exp_year.clone(), expiry_year: ccard.card_exp_year.clone(),
cvc: ccard.card_cvc, cvc: ccard.card_cvc,

View File

@ -80,12 +80,13 @@ impl ConnectorCommon for Bluesnap {
res: Response, res: Response,
) -> CustomResult<ErrorResponse, errors::ConnectorError> { ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
logger::debug!(bluesnap_error_response=?res); logger::debug!(bluesnap_error_response=?res);
let response: bluesnap::BluesnapErrorResponse = res let response: bluesnap::BluesnapErrors = res
.response .response
.parse_struct("BluesnapErrorResponse") .parse_struct("BluesnapErrorResponse")
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?; .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
let response_error_message = response.message.first().map_or( let response_error_message = match response {
bluesnap::BluesnapErrors::PaymentError(error_res) => error_res.message.first().map_or(
ErrorResponse { ErrorResponse {
status_code: res.status_code, status_code: res.status_code,
code: consts::NO_ERROR_CODE.to_string(), code: consts::NO_ERROR_CODE.to_string(),
@ -98,7 +99,14 @@ impl ConnectorCommon for Bluesnap {
message: error_response.description.clone(), message: error_response.description.clone(),
reason: None, reason: None,
}, },
); ),
bluesnap::BluesnapErrors::AuthError(error_res) => ErrorResponse {
status_code: res.status_code,
code: error_res.error_code.clone(),
message: error_res.error_description,
reason: None,
},
};
Ok(response_error_message) Ok(response_error_message)
} }
} }

View File

@ -325,8 +325,22 @@ pub struct ErrorDetails {
pub description: String, pub description: String,
} }
#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq)] #[derive(Default, Debug, Clone, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct BluesnapErrorResponse { pub struct BluesnapErrorResponse {
pub message: Vec<ErrorDetails>, pub message: Vec<ErrorDetails>,
} }
#[derive(Default, Debug, Clone, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct BluesnapAuthErrorResponse {
pub error_code: String,
pub error_description: String,
}
#[derive(Debug, Clone, Deserialize, PartialEq)]
#[serde(untagged)]
pub enum BluesnapErrors {
PaymentError(BluesnapErrorResponse),
AuthError(BluesnapAuthErrorResponse),
}