diff --git a/crates/common_utils/src/ext_traits.rs b/crates/common_utils/src/ext_traits.rs index aefb532471..ac626ff703 100644 --- a/crates/common_utils/src/ext_traits.rs +++ b/crates/common_utils/src/ext_traits.rs @@ -200,17 +200,17 @@ impl ByteSliceExt for [u8] { /// /// Extending functionalities of `serde_json::Value` for performing parsing /// -pub trait ValueExt { +pub trait ValueExt { /// /// Convert `serde_json::Value` into type `` by using `serde::Deserialize` /// - fn parse_value(self, type_name: &str) -> CustomResult + fn parse_value(self, type_name: &str) -> CustomResult where T: serde::de::DeserializeOwned; } -impl ValueExt for serde_json::Value { - fn parse_value(self, type_name: &str) -> CustomResult +impl ValueExt for serde_json::Value { + fn parse_value(self, type_name: &str) -> CustomResult where T: serde::de::DeserializeOwned, { @@ -225,11 +225,11 @@ impl ValueExt for serde_json::Value { } } -impl ValueExt for Secret +impl ValueExt for Secret where MaskingStrategy: Strategy, { - fn parse_value(self, type_name: &str) -> CustomResult + fn parse_value(self, type_name: &str) -> CustomResult where T: serde::de::DeserializeOwned, { diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs index d0ba58d953..f2ab070b62 100644 --- a/crates/router/src/core/payments.rs +++ b/crates/router/src/core/payments.rs @@ -1203,11 +1203,15 @@ pub fn decide_connector( return Ok(api::ConnectorCallType::Single(connector_data)); } - let routing_algorithm: api::RoutingAlgorithm = merchant_account + let routing_algorithm = merchant_account .routing_algorithm .clone() - .parse_value("RoutingAlgorithm") - .change_context(errors::ApiErrorResponse::InternalServerError) + .get_required_value("RoutingAlgorithm") + .change_context(errors::ApiErrorResponse::PreconditionFailed { + message: "no routing algorithm has been configured".to_string(), + })? + .parse_value::("RoutingAlgorithm") + .change_context(errors::ApiErrorResponse::InternalServerError) // Deserialization failed .attach_printable("Unable to deserialize merchant routing algorithm")?; let connector_name = match routing_algorithm { diff --git a/crates/router/src/utils/ext_traits.rs b/crates/router/src/utils/ext_traits.rs index a27da6d49e..082a499bcb 100644 --- a/crates/router/src/utils/ext_traits.rs +++ b/crates/router/src/utils/ext_traits.rs @@ -20,7 +20,7 @@ pub trait OptionExt { fn parse_value(self, type_name: &'static str) -> CustomResult where - T: ValueExt, + T: ValueExt, U: serde::de::DeserializeOwned; fn update_value(&mut self, value: Option); @@ -67,7 +67,7 @@ where fn parse_value(self, type_name: &'static str) -> CustomResult where - T: ValueExt, + T: ValueExt, U: serde::de::DeserializeOwned, { let value = self