mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	feat(core): Added support for unified_connector_service CardNumber and Secret<String> Type (#9044)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
		
							
								
								
									
										132
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										132
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -357,7 +357,7 @@ dependencies = [ | ||||
|  "error-stack 0.4.1", | ||||
|  "futures 0.3.31", | ||||
|  "hyperswitch_interfaces", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "opensearch", | ||||
|  "reqwest 0.11.27", | ||||
|  "router_env", | ||||
| @ -462,7 +462,7 @@ dependencies = [ | ||||
|  "deserialize_form_style_query_parameter", | ||||
|  "error-stack 0.4.1", | ||||
|  "euclid", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "mime", | ||||
|  "nutype", | ||||
|  "reqwest 0.11.27", | ||||
| @ -1620,7 +1620,7 @@ version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "common_utils", | ||||
|  "error-stack 0.4.1", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "regex", | ||||
|  "router_env", | ||||
|  "serde", | ||||
| @ -1846,7 +1846,7 @@ name = "common_enums" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "diesel", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "router_derive", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
| @ -1865,7 +1865,7 @@ dependencies = [ | ||||
|  "diesel", | ||||
|  "error-stack 0.4.1", | ||||
|  "euclid", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "time", | ||||
| @ -1889,7 +1889,7 @@ dependencies = [ | ||||
|  "globset", | ||||
|  "hex", | ||||
|  "http 0.2.12", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "md5", | ||||
|  "nanoid", | ||||
|  "nutype", | ||||
| @ -2633,7 +2633,7 @@ dependencies = [ | ||||
|  "common_utils", | ||||
|  "diesel", | ||||
|  "error-stack 0.4.1", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "router_derive", | ||||
|  "router_env", | ||||
|  "serde", | ||||
| @ -2721,7 +2721,7 @@ dependencies = [ | ||||
|  "error-stack 0.4.1", | ||||
|  "external_services", | ||||
|  "hyperswitch_interfaces", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "mime", | ||||
|  "redis_interface", | ||||
|  "reqwest 0.11.27", | ||||
| @ -3020,7 +3020,7 @@ name = "events" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "error-stack 0.4.1", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "router_env", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
| @ -3053,7 +3053,7 @@ dependencies = [ | ||||
|  "hyper-util", | ||||
|  "hyperswitch_interfaces", | ||||
|  "lettre", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "once_cell", | ||||
|  "prost", | ||||
|  "prost-types", | ||||
| @ -3377,8 +3377,9 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "g2h" | ||||
| version = "0.4.0" | ||||
| source = "git+https://github.com/NishantJoshi00/g2h?branch=fixing-response-serializing#fd2c856b2c6c88a85d6fe51d95b4d3342b788d31" | ||||
| version = "0.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d843f7c70cdae8a2452e0b2f463b7e483a57cece7687da89371d952d44e0445d" | ||||
| dependencies = [ | ||||
|  "cargo_metadata 0.19.2", | ||||
|  "heck 0.5.0", | ||||
| @ -3540,19 +3541,21 @@ dependencies = [ | ||||
| [[package]] | ||||
| name = "grpc-api-types" | ||||
| version = "0.1.0" | ||||
| source = "git+https://github.com/juspay/connector-service?rev=aae51574fed25b0a7849e3832cff8904bc310cf5#aae51574fed25b0a7849e3832cff8904bc310cf5" | ||||
| source = "git+https://github.com/juspay/connector-service?rev=a56de0a4ee393af5c401f02b6b4344cb263f4cac#a56de0a4ee393af5c401f02b6b4344cb263f4cac" | ||||
| dependencies = [ | ||||
|  "axum 0.8.4", | ||||
|  "error-stack 0.5.0", | ||||
|  "g2h", | ||||
|  "heck 0.5.0", | ||||
|  "http 1.3.1", | ||||
|  "masking 0.1.0 (git+https://github.com/juspay/hyperswitch?tag=v1.116.0)", | ||||
|  "prost", | ||||
|  "prost-build", | ||||
|  "prost-types", | ||||
|  "serde", | ||||
|  "tonic 0.13.1", | ||||
|  "tonic-build", | ||||
|  "ucs_cards", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4046,7 +4049,7 @@ dependencies = [ | ||||
|  "isocountry", | ||||
|  "josekit", | ||||
|  "lazy_static", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "mime", | ||||
|  "nanoid", | ||||
|  "num-traits", | ||||
| @ -4104,7 +4107,7 @@ dependencies = [ | ||||
|  "error-stack 0.4.1", | ||||
|  "futures 0.3.31", | ||||
|  "http 0.2.12", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "mime", | ||||
|  "router_derive", | ||||
|  "router_env", | ||||
| @ -4131,7 +4134,7 @@ dependencies = [ | ||||
|  "error-stack 0.4.1", | ||||
|  "http 0.2.12", | ||||
|  "hyperswitch_domain_models", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "mime", | ||||
|  "reqwest 0.11.27", | ||||
|  "router_env", | ||||
| @ -4392,7 +4395,7 @@ dependencies = [ | ||||
|  "async-trait", | ||||
|  "common_utils", | ||||
|  "error-stack 0.4.1", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "nom 7.1.3", | ||||
|  "reqwest 0.12.7", | ||||
|  "router_env", | ||||
| @ -4603,7 +4606,7 @@ dependencies = [ | ||||
|  "criterion", | ||||
|  "euclid", | ||||
|  "hyperswitch_constraint_graph", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "strum 0.26.3", | ||||
| @ -4843,6 +4846,23 @@ dependencies = [ | ||||
|  "zeroize", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "masking" | ||||
| version = "0.1.0" | ||||
| source = "git+https://github.com/juspay/hyperswitch?tag=v1.116.0#672d749e20bec7800613878e36a0ab3885177326" | ||||
| dependencies = [ | ||||
|  "bytes 1.10.1", | ||||
|  "diesel", | ||||
|  "erased-serde 0.4.6", | ||||
|  "prost", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "subtle", | ||||
|  "time", | ||||
|  "url", | ||||
|  "zeroize", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "matchers" | ||||
| version = "0.1.0" | ||||
| @ -5702,7 +5722,7 @@ dependencies = [ | ||||
|  "error-stack 0.4.1", | ||||
|  "hyperswitch_domain_models", | ||||
|  "hyperswitch_interfaces", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "rdkafka", | ||||
|  "router_env", | ||||
|  "scheduler", | ||||
| @ -5958,7 +5978,7 @@ dependencies = [ | ||||
|  "common_utils", | ||||
|  "error-stack 0.4.1", | ||||
|  "http 0.2.12", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "mime", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
| @ -6810,7 +6830,7 @@ dependencies = [ | ||||
|  "josekit", | ||||
|  "jsonwebtoken", | ||||
|  "kgraph_utils", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "maud", | ||||
|  "mimalloc", | ||||
|  "mime", | ||||
| @ -6855,6 +6875,7 @@ dependencies = [ | ||||
|  "tokio 1.45.1", | ||||
|  "totp-rs", | ||||
|  "tracing-futures", | ||||
|  "ucs_cards", | ||||
|  "unicode-segmentation", | ||||
|  "url", | ||||
|  "urlencoding", | ||||
| @ -6940,7 +6961,7 @@ dependencies = [ | ||||
| [[package]] | ||||
| name = "rust-grpc-client" | ||||
| version = "0.1.0" | ||||
| source = "git+https://github.com/juspay/connector-service?rev=aae51574fed25b0a7849e3832cff8904bc310cf5#aae51574fed25b0a7849e3832cff8904bc310cf5" | ||||
| source = "git+https://github.com/juspay/connector-service?rev=a56de0a4ee393af5c401f02b6b4344cb263f4cac#a56de0a4ee393af5c401f02b6b4344cb263f4cac" | ||||
| dependencies = [ | ||||
|  "grpc-api-types", | ||||
| ] | ||||
| @ -8146,7 +8167,7 @@ dependencies = [ | ||||
|  "error-stack 0.4.1", | ||||
|  "futures 0.3.31", | ||||
|  "hyperswitch_domain_models", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "moka", | ||||
|  "redis_interface", | ||||
|  "router_derive", | ||||
| @ -8442,7 +8463,7 @@ dependencies = [ | ||||
|  "base64 0.22.1", | ||||
|  "clap", | ||||
|  "common_enums", | ||||
|  "masking", | ||||
|  "masking 0.1.0", | ||||
|  "rand 0.8.5", | ||||
|  "regex", | ||||
|  "reqwest 0.11.27", | ||||
| @ -9324,6 +9345,69 @@ version = "0.1.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" | ||||
|  | ||||
| [[package]] | ||||
| name = "ucs_cards" | ||||
| version = "0.1.0" | ||||
| source = "git+https://github.com/juspay/connector-service?rev=a56de0a4ee393af5c401f02b6b4344cb263f4cac#a56de0a4ee393af5c401f02b6b4344cb263f4cac" | ||||
| dependencies = [ | ||||
|  "bytes 1.10.1", | ||||
|  "error-stack 0.4.1", | ||||
|  "masking 0.1.0 (git+https://github.com/juspay/hyperswitch?tag=v1.116.0)", | ||||
|  "prost", | ||||
|  "regex", | ||||
|  "serde", | ||||
|  "thiserror 1.0.69", | ||||
|  "time", | ||||
|  "ucs_common_utils", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "ucs_common_enums" | ||||
| version = "0.1.0" | ||||
| source = "git+https://github.com/juspay/connector-service?rev=a56de0a4ee393af5c401f02b6b4344cb263f4cac#a56de0a4ee393af5c401f02b6b4344cb263f4cac" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
|  "strum 0.26.3", | ||||
|  "thiserror 1.0.69", | ||||
|  "utoipa", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "ucs_common_utils" | ||||
| version = "0.1.0" | ||||
| source = "git+https://github.com/juspay/connector-service?rev=a56de0a4ee393af5c401f02b6b4344cb263f4cac#a56de0a4ee393af5c401f02b6b4344cb263f4cac" | ||||
| dependencies = [ | ||||
|  "anyhow", | ||||
|  "blake3", | ||||
|  "bytes 1.10.1", | ||||
|  "chrono", | ||||
|  "error-stack 0.4.1", | ||||
|  "hex", | ||||
|  "http 1.3.1", | ||||
|  "masking 0.1.0 (git+https://github.com/juspay/hyperswitch?tag=v1.116.0)", | ||||
|  "md5", | ||||
|  "nanoid", | ||||
|  "once_cell", | ||||
|  "quick-xml", | ||||
|  "rand 0.8.5", | ||||
|  "regex", | ||||
|  "reqwest 0.11.27", | ||||
|  "ring 0.17.14", | ||||
|  "rust_decimal", | ||||
|  "semver 1.0.26", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "serde_urlencoded", | ||||
|  "strum 0.26.3", | ||||
|  "thiserror 1.0.69", | ||||
|  "time", | ||||
|  "tracing", | ||||
|  "ucs_common_enums", | ||||
|  "url", | ||||
|  "utoipa", | ||||
|  "uuid", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "unarray" | ||||
| version = "0.1.4" | ||||
|  | ||||
| @ -66,7 +66,7 @@ reqwest = { version = "0.11.27", features = ["rustls-tls"] } | ||||
| http = "0.2.12" | ||||
| url = { version = "2.5.4", features = ["serde"] } | ||||
| quick-xml = { version = "0.31.0", features = ["serialize"] } | ||||
| unified-connector-service-client = { git = "https://github.com/juspay/connector-service", rev = "aae51574fed25b0a7849e3832cff8904bc310cf5", package = "rust-grpc-client" } | ||||
| unified-connector-service-client = { git = "https://github.com/juspay/connector-service", rev = "a56de0a4ee393af5c401f02b6b4344cb263f4cac", package = "rust-grpc-client" } | ||||
|  | ||||
|  | ||||
| # First party crates | ||||
|  | ||||
| @ -89,7 +89,8 @@ reqwest = { version = "0.11.27", features = ["json", "rustls-tls", "gzip", "mult | ||||
| ring = "0.17.14" | ||||
| rust_decimal = { version = "1.37.1", features = ["serde-with-float", "serde-with-str"] } | ||||
| rust-i18n = { git = "https://github.com/kashif-m/rust-i18n", rev = "f2d8096aaaff7a87a847c35a5394c269f75e077a" } | ||||
| unified-connector-service-client = { git = "https://github.com/juspay/connector-service", rev = "aae51574fed25b0a7849e3832cff8904bc310cf5", package = "rust-grpc-client" } | ||||
| unified-connector-service-client = { git = "https://github.com/juspay/connector-service", rev = "a56de0a4ee393af5c401f02b6b4344cb263f4cac", package = "rust-grpc-client" } | ||||
| unified-connector-service-cards = { git = "https://github.com/juspay/connector-service", rev = "a56de0a4ee393af5c401f02b6b4344cb263f4cac", package = "ucs_cards" } | ||||
| rustc-hash = "1.1.0" | ||||
| rustls = "0.22" | ||||
| rustls-pemfile = "2" | ||||
|  | ||||
| @ -18,6 +18,7 @@ use hyperswitch_domain_models::{ | ||||
| }; | ||||
| use masking::{ExposeInterface, PeekInterface, Secret}; | ||||
| use router_env::logger; | ||||
| use unified_connector_service_cards::CardNumber; | ||||
| use unified_connector_service_client::payments::{ | ||||
|     self as payments_grpc, payment_method::PaymentMethod, CardDetails, CardPaymentMethodType, | ||||
|     PaymentServiceAuthorizeResponse, RewardPaymentMethodType, | ||||
| @ -277,11 +278,17 @@ pub fn build_unified_connector_service_payment_method( | ||||
|                 .transpose()?; | ||||
|  | ||||
|             let card_details = CardDetails { | ||||
|                 card_number: card.card_number.get_card_no(), | ||||
|                 card_exp_month, | ||||
|                 card_exp_year: card.get_expiry_year_4_digit().peek().to_string(), | ||||
|                 card_cvc: card.card_cvc.peek().to_string(), | ||||
|                 card_holder_name: card.card_holder_name.map(|name| name.expose()), | ||||
|                 card_number: Some( | ||||
|                     CardNumber::from_str(&card.card_number.get_card_no()).change_context( | ||||
|                         UnifiedConnectorServiceError::RequestEncodingFailedWithReason( | ||||
|                             "Failed to parse card number".to_string(), | ||||
|                         ), | ||||
|                     )?, | ||||
|                 ), | ||||
|                 card_exp_month: Some(card_exp_month.into()), | ||||
|                 card_exp_year: Some(card.get_expiry_year_4_digit().expose().into()), | ||||
|                 card_cvc: Some(card.card_cvc.expose().into()), | ||||
|                 card_holder_name: card.card_holder_name.map(|name| name.expose().into()), | ||||
|                 card_issuer: card.card_issuer.clone(), | ||||
|                 card_network: card_network.map(|card_network| card_network.into()), | ||||
|                 card_type: card.card_type.clone(), | ||||
| @ -316,12 +323,13 @@ pub fn build_unified_connector_service_payment_method( | ||||
|                 hyperswitch_domain_models::payment_method_data::UpiData::UpiCollect( | ||||
|                     upi_collect_data, | ||||
|                 ) => { | ||||
|                     let vpa_id = upi_collect_data.vpa_id.map(|vpa| vpa.expose()); | ||||
|                     let upi_details = payments_grpc::UpiCollect { vpa_id }; | ||||
|                     let upi_details = payments_grpc::UpiCollect { | ||||
|                         vpa_id: upi_collect_data.vpa_id.map(|vpa| vpa.expose().into()), | ||||
|                     }; | ||||
|                     PaymentMethod::UpiCollect(upi_details) | ||||
|                 } | ||||
|                 hyperswitch_domain_models::payment_method_data::UpiData::UpiIntent(_) => { | ||||
|                     let upi_details = payments_grpc::UpiIntent {}; | ||||
|                     let upi_details = payments_grpc::UpiIntent { app_name: None }; | ||||
|                     PaymentMethod::UpiIntent(upi_details) | ||||
|                 } | ||||
|             }; | ||||
| @ -369,13 +377,13 @@ pub fn build_unified_connector_service_payment_method_for_external_proxy( | ||||
|                 .map(payments_grpc::CardNetwork::foreign_try_from) | ||||
|                 .transpose()?; | ||||
|             let card_details = CardDetails { | ||||
|                 card_number: external_vault_card.card_number.peek().to_string(), | ||||
|                 card_exp_month: external_vault_card.card_exp_month.peek().to_string(), | ||||
|                 card_exp_year: external_vault_card.card_exp_year.peek().to_string(), | ||||
|                 card_cvc: external_vault_card.card_cvc.peek().to_string(), | ||||
|                 card_holder_name: external_vault_card | ||||
|                     .card_holder_name | ||||
|                     .map(|name| name.expose()), | ||||
|                 card_number: Some(CardNumber::from_str(external_vault_card.card_number.peek()).change_context( | ||||
|                     UnifiedConnectorServiceError::RequestEncodingFailedWithReason("Failed to parse card number".to_string()) | ||||
|                 )?), | ||||
|                 card_exp_month: Some(external_vault_card.card_exp_month.expose().into()), | ||||
|                 card_exp_year: Some(external_vault_card.card_exp_year.expose().into()), | ||||
|                 card_cvc: Some(external_vault_card.card_cvc.expose().into()), | ||||
|                 card_holder_name: external_vault_card.card_holder_name.map(|name| name.expose().into()), | ||||
|                 card_issuer: external_vault_card.card_issuer.clone(), | ||||
|                 card_network: card_network.map(|card_network| card_network.into()), | ||||
|                 card_type: external_vault_card.card_type.clone(), | ||||
|  | ||||
| @ -141,7 +141,7 @@ impl ForeignTryFrom<&RouterData<Authorize, PaymentsAuthorizeData, PaymentsRespon | ||||
|                 .request | ||||
|                 .email | ||||
|                 .clone() | ||||
|                 .map(|e| e.expose().expose()), | ||||
|                 .map(|e| e.expose().expose().into()), | ||||
|             browser_info, | ||||
|             access_token: None, | ||||
|             session_token: None, | ||||
| @ -193,6 +193,7 @@ impl ForeignTryFrom<&RouterData<Authorize, PaymentsAuthorizeData, PaymentsRespon | ||||
|                         .collect::<HashMap<String, String>>() | ||||
|                 }) | ||||
|                 .unwrap_or_default(), | ||||
|             test_mode: None, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -264,7 +265,7 @@ impl | ||||
|                 .request | ||||
|                 .email | ||||
|                 .clone() | ||||
|                 .map(|e| e.expose().expose()), | ||||
|                 .map(|e| e.expose().expose().into()), | ||||
|             browser_info, | ||||
|             access_token: None, | ||||
|             session_token: None, | ||||
| @ -316,6 +317,7 @@ impl | ||||
|                         .collect::<HashMap<String, String>>() | ||||
|                 }) | ||||
|                 .unwrap_or_default(), | ||||
|             test_mode: None, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -372,7 +374,7 @@ impl ForeignTryFrom<&RouterData<SetupMandate, SetupMandateRequestData, PaymentsR | ||||
|                 .request | ||||
|                 .email | ||||
|                 .clone() | ||||
|                 .map(|e| e.expose().expose()), | ||||
|                 .map(|e| e.expose().expose().into()), | ||||
|             customer_name: router_data | ||||
|                 .request | ||||
|                 .customer_name | ||||
| @ -495,8 +497,10 @@ impl ForeignTryFrom<&RouterData<Authorize, PaymentsAuthorizeData, PaymentsRespon | ||||
|                 .request | ||||
|                 .email | ||||
|                 .clone() | ||||
|                 .map(|e| e.expose().expose()), | ||||
|                 .map(|e| e.expose().expose().into()), | ||||
|             browser_info, | ||||
|             test_mode: None, | ||||
|             payment_method_type: None, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
| @ -861,11 +865,6 @@ impl ForeignTryFrom<hyperswitch_domain_models::payment_address::PaymentAddress> | ||||
|         let shipping = payment_address.get_shipping().map(|address| { | ||||
|             let details = address.address.as_ref(); | ||||
|  | ||||
|             let get_str = | ||||
|                 |opt: &Option<masking::Secret<String>>| opt.as_ref().map(|s| s.peek().to_owned()); | ||||
|  | ||||
|             let get_plain = |opt: &Option<String>| opt.clone(); | ||||
|  | ||||
|             let country = details.and_then(|details| { | ||||
|                 details | ||||
|                     .country | ||||
| @ -875,20 +874,23 @@ impl ForeignTryFrom<hyperswitch_domain_models::payment_address::PaymentAddress> | ||||
|             }); | ||||
|  | ||||
|             payments_grpc::Address { | ||||
|                 first_name: get_str(&details.and_then(|d| d.first_name.clone())), | ||||
|                 last_name: get_str(&details.and_then(|d| d.last_name.clone())), | ||||
|                 line1: get_str(&details.and_then(|d| d.line1.clone())), | ||||
|                 line2: get_str(&details.and_then(|d| d.line2.clone())), | ||||
|                 line3: get_str(&details.and_then(|d| d.line3.clone())), | ||||
|                 city: get_plain(&details.and_then(|d| d.city.clone())), | ||||
|                 state: get_str(&details.and_then(|d| d.state.clone())), | ||||
|                 zip_code: get_str(&details.and_then(|d| d.zip.clone())), | ||||
|                 first_name: details.and_then(|d| d.first_name.as_ref().map(|s| s.clone().expose())), | ||||
|                 last_name: details.and_then(|d| d.last_name.as_ref().map(|s| s.clone().expose())), | ||||
|                 line1: details.and_then(|d| d.line1.as_ref().map(|s| s.clone().expose().into())), | ||||
|                 line2: details.and_then(|d| d.line2.as_ref().map(|s| s.clone().expose().into())), | ||||
|                 line3: details.and_then(|d| d.line3.as_ref().map(|s| s.clone().expose().into())), | ||||
|                 city: details.and_then(|d| d.city.as_ref().map(|s| s.clone().into())), | ||||
|                 state: details.and_then(|d| d.state.as_ref().map(|s| s.clone().expose().into())), | ||||
|                 zip_code: details.and_then(|d| d.zip.as_ref().map(|s| s.clone().expose().into())), | ||||
|                 country_alpha2_code: country, | ||||
|                 email: address.email.as_ref().map(|e| e.peek().to_string()), | ||||
|                 email: address | ||||
|                     .email | ||||
|                     .as_ref() | ||||
|                     .map(|e| e.clone().expose().expose().into()), | ||||
|                 phone_number: address | ||||
|                     .phone | ||||
|                     .as_ref() | ||||
|                     .and_then(|phone| phone.number.as_ref().map(|n| n.peek().to_string())), | ||||
|                     .and_then(|phone| phone.number.as_ref().map(|n| n.clone().expose().into())), | ||||
|                 phone_country_code: address.phone.as_ref().and_then(|p| p.country_code.clone()), | ||||
|             } | ||||
|         }); | ||||
| @ -896,11 +898,6 @@ impl ForeignTryFrom<hyperswitch_domain_models::payment_address::PaymentAddress> | ||||
|         let billing = payment_address.get_payment_billing().map(|address| { | ||||
|             let details = address.address.as_ref(); | ||||
|  | ||||
|             let get_str = | ||||
|                 |opt: &Option<masking::Secret<String>>| opt.as_ref().map(|s| s.peek().to_owned()); | ||||
|  | ||||
|             let get_plain = |opt: &Option<String>| opt.clone(); | ||||
|  | ||||
|             let country = details.and_then(|details| { | ||||
|                 details | ||||
|                     .country | ||||
| @ -910,20 +907,21 @@ impl ForeignTryFrom<hyperswitch_domain_models::payment_address::PaymentAddress> | ||||
|             }); | ||||
|  | ||||
|             payments_grpc::Address { | ||||
|                 first_name: get_str(&details.and_then(|d| d.first_name.clone())), | ||||
|                 last_name: get_str(&details.and_then(|d| d.last_name.clone())), | ||||
|                 line1: get_str(&details.and_then(|d| d.line1.clone())), | ||||
|                 line2: get_str(&details.and_then(|d| d.line2.clone())), | ||||
|                 line3: get_str(&details.and_then(|d| d.line3.clone())), | ||||
|                 city: get_plain(&details.and_then(|d| d.city.clone())), | ||||
|                 state: get_str(&details.and_then(|d| d.state.clone())), | ||||
|                 zip_code: get_str(&details.and_then(|d| d.zip.clone())), | ||||
|                 first_name: details | ||||
|                     .and_then(|d| d.first_name.as_ref().map(|s| s.peek().to_string())), | ||||
|                 last_name: details.and_then(|d| d.last_name.as_ref().map(|s| s.peek().to_string())), | ||||
|                 line1: details.and_then(|d| d.line1.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                 line2: details.and_then(|d| d.line2.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                 line3: details.and_then(|d| d.line3.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                 city: details.and_then(|d| d.city.as_ref().map(|s| s.clone().into())), | ||||
|                 state: details.and_then(|d| d.state.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                 zip_code: details.and_then(|d| d.zip.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                 country_alpha2_code: country, | ||||
|                 email: address.email.as_ref().map(|e| e.peek().to_string()), | ||||
|                 email: address.email.as_ref().map(|e| e.peek().to_string().into()), | ||||
|                 phone_number: address | ||||
|                     .phone | ||||
|                     .as_ref() | ||||
|                     .and_then(|phone| phone.number.as_ref().map(|n| n.peek().to_string())), | ||||
|                     .and_then(|phone| phone.number.as_ref().map(|n| n.peek().to_string().into())), | ||||
|                 phone_country_code: address.phone.as_ref().and_then(|p| p.country_code.clone()), | ||||
|             } | ||||
|         }); | ||||
| @ -932,12 +930,6 @@ impl ForeignTryFrom<hyperswitch_domain_models::payment_address::PaymentAddress> | ||||
|             payment_address.get_payment_method_billing().map(|address| { | ||||
|                 let details = address.address.as_ref(); | ||||
|  | ||||
|                 let get_str = |opt: &Option<masking::Secret<String>>| { | ||||
|                     opt.as_ref().map(|s| s.peek().to_owned()) | ||||
|                 }; | ||||
|  | ||||
|                 let get_plain = |opt: &Option<String>| opt.clone(); | ||||
|  | ||||
|                 let country = details.and_then(|details| { | ||||
|                     details | ||||
|                         .country | ||||
| @ -947,20 +939,30 @@ impl ForeignTryFrom<hyperswitch_domain_models::payment_address::PaymentAddress> | ||||
|                 }); | ||||
|  | ||||
|                 payments_grpc::Address { | ||||
|                     first_name: get_str(&details.and_then(|d| d.first_name.clone())), | ||||
|                     last_name: get_str(&details.and_then(|d| d.last_name.clone())), | ||||
|                     line1: get_str(&details.and_then(|d| d.line1.clone())), | ||||
|                     line2: get_str(&details.and_then(|d| d.line2.clone())), | ||||
|                     line3: get_str(&details.and_then(|d| d.line3.clone())), | ||||
|                     city: get_plain(&details.and_then(|d| d.city.clone())), | ||||
|                     state: get_str(&details.and_then(|d| d.state.clone())), | ||||
|                     zip_code: get_str(&details.and_then(|d| d.zip.clone())), | ||||
|                     first_name: details | ||||
|                         .and_then(|d| d.first_name.as_ref().map(|s| s.peek().to_string())), | ||||
|                     last_name: details | ||||
|                         .and_then(|d| d.last_name.as_ref().map(|s| s.peek().to_string())), | ||||
|                     line1: details | ||||
|                         .and_then(|d| d.line1.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                     line2: details | ||||
|                         .and_then(|d| d.line2.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                     line3: details | ||||
|                         .and_then(|d| d.line3.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                     city: details.and_then(|d| d.city.as_ref().map(|s| s.clone().into())), | ||||
|                     state: details | ||||
|                         .and_then(|d| d.state.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                     zip_code: details | ||||
|                         .and_then(|d| d.zip.as_ref().map(|s| s.peek().to_string().into())), | ||||
|                     country_alpha2_code: country, | ||||
|                     email: address.email.as_ref().map(|e| e.peek().to_string()), | ||||
|                     email: address | ||||
|                         .email | ||||
|                         .as_ref() | ||||
|                         .map(|e| e.clone().expose().expose().into()), | ||||
|                     phone_number: address | ||||
|                         .phone | ||||
|                         .as_ref() | ||||
|                         .and_then(|phone| phone.number.as_ref().map(|n| n.peek().to_string())), | ||||
|                         .and_then(|phone| phone.number.as_ref().map(|n| n.clone().expose().into())), | ||||
|                     phone_country_code: address.phone.as_ref().and_then(|p| p.country_code.clone()), | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Debarshi Gupta
					Debarshi Gupta