diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index 8b0974cc4f..74eb8c048f 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -2010,7 +2010,9 @@ pub enum FileUploadProvider { Checkout, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, strum::Display)] +#[derive( + Debug, Clone, PartialEq, Eq, Serialize, Deserialize, strum::Display, strum::EnumString, +)] pub enum UsStatesAbbreviation { AL, AK, @@ -2073,7 +2075,9 @@ pub enum UsStatesAbbreviation { WY, } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, strum::Display)] +#[derive( + Debug, Clone, PartialEq, Eq, Serialize, Deserialize, strum::Display, strum::EnumString, +)] pub enum CanadaStatesAbbreviation { AB, BC, diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs index 3ebbc0dc9c..0be62abbea 100644 --- a/crates/router/src/connector/utils.rs +++ b/crates/router/src/connector/utils.rs @@ -10,6 +10,7 @@ use base64::Engine; use common_utils::{ date_time, errors::ReportSwitchExt, + ext_traits::StringExt, pii::{self, Email, IpAddress}, }; use diesel_models::enums; @@ -1789,72 +1790,80 @@ pub fn get_webhook_merchant_secret_key(connector_label: &str, merchant_id: &str) impl ForeignTryFrom for UsStatesAbbreviation { type Error = error_stack::Report; fn foreign_try_from(value: String) -> Result { - let binding = value.as_str().to_lowercase(); - let state = binding.as_str(); - match state { - "alabama" => Ok(Self::AL), - "alaska" => Ok(Self::AK), - "american samoa" => Ok(Self::AS), - "arizona" => Ok(Self::AZ), - "arkansas" => Ok(Self::AR), - "california" => Ok(Self::CA), - "colorado" => Ok(Self::CO), - "connecticut" => Ok(Self::CT), - "delaware" => Ok(Self::DE), - "district of columbia" | "columbia" => Ok(Self::DC), - "federated states of micronesia" | "micronesia" => Ok(Self::FM), - "florida" => Ok(Self::FL), - "georgia" => Ok(Self::GA), - "guam" => Ok(Self::GU), - "hawaii" => Ok(Self::HI), - "idaho" => Ok(Self::ID), - "illinois" => Ok(Self::IL), - "indiana" => Ok(Self::IN), - "iowa" => Ok(Self::IA), - "kansas" => Ok(Self::KS), - "kentucky" => Ok(Self::KY), - "louisiana" => Ok(Self::LA), - "maine" => Ok(Self::ME), - "marshall islands" => Ok(Self::MH), - "maryland" => Ok(Self::MD), - "massachusetts" => Ok(Self::MA), - "michigan" => Ok(Self::MI), - "minnesota" => Ok(Self::MN), - "mississippi" => Ok(Self::MS), - "missouri" => Ok(Self::MO), - "montana" => Ok(Self::MT), - "nebraska" => Ok(Self::NE), - "nevada" => Ok(Self::NV), - "new hampshire" => Ok(Self::NH), - "new jersey" => Ok(Self::NJ), - "new mexico" => Ok(Self::NM), - "new york" => Ok(Self::NY), - "north carolina" => Ok(Self::NC), - "north dakota" => Ok(Self::ND), - "northern mariana islands" => Ok(Self::MP), - "ohio" => Ok(Self::OH), - "oklahoma" => Ok(Self::OK), - "oregon" => Ok(Self::OR), - "palau" => Ok(Self::PW), - "pennsylvania" => Ok(Self::PA), - "puerto rico" => Ok(Self::PR), - "rhode island" => Ok(Self::RI), - "south carolina" => Ok(Self::SC), - "south dakota" => Ok(Self::SD), - "tennessee" => Ok(Self::TN), - "texas" => Ok(Self::TX), - "utah" => Ok(Self::UT), - "vermont" => Ok(Self::VT), - "virgin islands" => Ok(Self::VI), - "virginia" => Ok(Self::VA), - "washington" => Ok(Self::WA), - "west virginia" => Ok(Self::WV), - "wisconsin" => Ok(Self::WI), - "wyoming" => Ok(Self::WY), - _ => Err(errors::ConnectorError::InvalidDataFormat { - field_name: "address.state", + let state_abbreviation_check = + StringExt::::parse_enum(value.to_uppercase().clone(), "UsStatesAbbreviation"); + + match state_abbreviation_check { + Ok(state_abbreviation) => Ok(state_abbreviation), + Err(_) => { + let binding = value.as_str().to_lowercase(); + let state = binding.as_str(); + match state { + "alabama" => Ok(Self::AL), + "alaska" => Ok(Self::AK), + "american samoa" => Ok(Self::AS), + "arizona" => Ok(Self::AZ), + "arkansas" => Ok(Self::AR), + "california" => Ok(Self::CA), + "colorado" => Ok(Self::CO), + "connecticut" => Ok(Self::CT), + "delaware" => Ok(Self::DE), + "district of columbia" | "columbia" => Ok(Self::DC), + "federated states of micronesia" | "micronesia" => Ok(Self::FM), + "florida" => Ok(Self::FL), + "georgia" => Ok(Self::GA), + "guam" => Ok(Self::GU), + "hawaii" => Ok(Self::HI), + "idaho" => Ok(Self::ID), + "illinois" => Ok(Self::IL), + "indiana" => Ok(Self::IN), + "iowa" => Ok(Self::IA), + "kansas" => Ok(Self::KS), + "kentucky" => Ok(Self::KY), + "louisiana" => Ok(Self::LA), + "maine" => Ok(Self::ME), + "marshall islands" => Ok(Self::MH), + "maryland" => Ok(Self::MD), + "massachusetts" => Ok(Self::MA), + "michigan" => Ok(Self::MI), + "minnesota" => Ok(Self::MN), + "mississippi" => Ok(Self::MS), + "missouri" => Ok(Self::MO), + "montana" => Ok(Self::MT), + "nebraska" => Ok(Self::NE), + "nevada" => Ok(Self::NV), + "new hampshire" => Ok(Self::NH), + "new jersey" => Ok(Self::NJ), + "new mexico" => Ok(Self::NM), + "new york" => Ok(Self::NY), + "north carolina" => Ok(Self::NC), + "north dakota" => Ok(Self::ND), + "northern mariana islands" => Ok(Self::MP), + "ohio" => Ok(Self::OH), + "oklahoma" => Ok(Self::OK), + "oregon" => Ok(Self::OR), + "palau" => Ok(Self::PW), + "pennsylvania" => Ok(Self::PA), + "puerto rico" => Ok(Self::PR), + "rhode island" => Ok(Self::RI), + "south carolina" => Ok(Self::SC), + "south dakota" => Ok(Self::SD), + "tennessee" => Ok(Self::TN), + "texas" => Ok(Self::TX), + "utah" => Ok(Self::UT), + "vermont" => Ok(Self::VT), + "virgin islands" => Ok(Self::VI), + "virginia" => Ok(Self::VA), + "washington" => Ok(Self::WA), + "west virginia" => Ok(Self::WV), + "wisconsin" => Ok(Self::WI), + "wyoming" => Ok(Self::WY), + _ => Err(errors::ConnectorError::InvalidDataFormat { + field_name: "address.state", + } + .into()), + } } - .into()), } } } @@ -1862,26 +1871,33 @@ impl ForeignTryFrom for UsStatesAbbreviation { impl ForeignTryFrom for CanadaStatesAbbreviation { type Error = error_stack::Report; fn foreign_try_from(value: String) -> Result { - let binding = value.as_str().to_lowercase(); - let state = binding.as_str(); - match state { - "alberta" => Ok(Self::AB), - "british columbia" => Ok(Self::BC), - "manitoba" => Ok(Self::MB), - "new brunswick" => Ok(Self::NB), - "newfoundland and labrador" | "newfoundland & labrador" => Ok(Self::NL), - "northwest territories" => Ok(Self::NT), - "nova scotia" => Ok(Self::NS), - "nunavut" => Ok(Self::NU), - "ontario" => Ok(Self::ON), - "prince edward island" => Ok(Self::PE), - "quebec" => Ok(Self::QC), - "saskatchewan" => Ok(Self::SK), - "yukon" => Ok(Self::YT), - _ => Err(errors::ConnectorError::InvalidDataFormat { - field_name: "address.state", + let state_abbreviation_check = + StringExt::::parse_enum(value.to_uppercase().clone(), "CanadaStatesAbbreviation"); + match state_abbreviation_check { + Ok(state_abbreviation) => Ok(state_abbreviation), + Err(_) => { + let binding = value.as_str().to_lowercase(); + let state = binding.as_str(); + match state { + "alberta" => Ok(Self::AB), + "british columbia" => Ok(Self::BC), + "manitoba" => Ok(Self::MB), + "new brunswick" => Ok(Self::NB), + "newfoundland and labrador" | "newfoundland & labrador" => Ok(Self::NL), + "northwest territories" => Ok(Self::NT), + "nova scotia" => Ok(Self::NS), + "nunavut" => Ok(Self::NU), + "ontario" => Ok(Self::ON), + "prince edward island" => Ok(Self::PE), + "quebec" => Ok(Self::QC), + "saskatchewan" => Ok(Self::SK), + "yukon" => Ok(Self::YT), + _ => Err(errors::ConnectorError::InvalidDataFormat { + field_name: "address.state", + } + .into()), + } } - .into()), } } }