Conditionally match strings in Rust using regex without much boilerplate. Yes, this uses once_cell
.
```rs use strmatch::strmatch;
enum StringType { Phone, Email, Others, }
let email = "example@example.com"; let result = strmatch!(email => { r#"(\d{4})-(\d{2})-(\d{2})"# => StringType::Phone, r#"^([a-zA-Z0-9.%-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,6})*$"# => StringType::Email, _ => StringType::Others }); asserteq!(StringType::Email, result);
let result = strmatch!("example@example.com" => { // Phone r#"(\d{4})-(\d{2})-(\d{2})"# => { 1 + 2 }, // Email r#"^([a-zA-Z0-9.%-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,6})*$"# => { 3 + 4 }, _ => 5, }); asserteq!(7, result); ```