mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
chore: add .attach_printable for InternalServerError (#368)
This commit is contained in:
@ -11,10 +11,16 @@ pub(crate) use common_utils::{
|
||||
fp_utils::when,
|
||||
validation::validate_email,
|
||||
};
|
||||
use error_stack::{IntoReport, ResultExt};
|
||||
use nanoid::nanoid;
|
||||
use serde::de::DeserializeOwned;
|
||||
|
||||
pub(crate) use self::ext_traits::{OptionExt, ValidateCall};
|
||||
use crate::consts;
|
||||
use crate::{
|
||||
consts,
|
||||
core::errors::{self, RouterResult},
|
||||
logger, types,
|
||||
};
|
||||
|
||||
pub mod error_parser {
|
||||
use std::fmt::Display;
|
||||
@ -67,3 +73,50 @@ pub mod error_parser {
|
||||
pub fn generate_id(length: usize, prefix: &str) -> String {
|
||||
format!("{}_{}", prefix, nanoid!(length, &consts::ALPHABETS))
|
||||
}
|
||||
|
||||
pub trait ConnectorResponseExt: Sized {
|
||||
fn get_response(self) -> RouterResult<types::Response>;
|
||||
fn get_error_response(self) -> RouterResult<types::Response>;
|
||||
fn get_response_inner<T: DeserializeOwned>(self, type_name: &str) -> RouterResult<T> {
|
||||
self.get_response()?
|
||||
.response
|
||||
.parse_struct(type_name)
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
}
|
||||
}
|
||||
|
||||
impl<E> ConnectorResponseExt
|
||||
for Result<Result<types::Response, types::Response>, error_stack::Report<E>>
|
||||
{
|
||||
fn get_error_response(self) -> RouterResult<types::Response> {
|
||||
self.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Error while receiving response")
|
||||
.and_then(|inner| match inner {
|
||||
Ok(res) => {
|
||||
logger::error!(response=?res);
|
||||
Err(errors::ApiErrorResponse::InternalServerError)
|
||||
.into_report()
|
||||
.attach_printable(format!(
|
||||
"Expecting error response, received response: {res:?}"
|
||||
))
|
||||
}
|
||||
Err(err_res) => Ok(err_res),
|
||||
})
|
||||
}
|
||||
|
||||
fn get_response(self) -> RouterResult<types::Response> {
|
||||
self.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Error while receiving response")
|
||||
.and_then(|inner| match inner {
|
||||
Err(err_res) => {
|
||||
logger::error!(error_response=?err_res);
|
||||
Err(errors::ApiErrorResponse::InternalServerError)
|
||||
.into_report()
|
||||
.attach_printable(format!(
|
||||
"Expecting response, received error response: {err_res:?}"
|
||||
))
|
||||
}
|
||||
Ok(res) => Ok(res),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user