Crates.io docs.rs

Allow the use of regular expressions or strings wherever you need string comparison.

Examples

Using Generics / Monomorphization

This pattern is faster but generates more code, slightly larger binary.

If you don't have a preference, go with this option as the code is usually more convenient to write.

rust fn accept_needle<N>(needle: N) -> bool where N: Needle, { needle.is_match("Test") }

And now all of the following will work: rust accept_needle("Test"); accept_needle(String::from("Test")); accept_needle(Regex::new("Test").unwrap()); accept_needle(Regex::new(r"^T.+t$").unwrap());

For string comparisons you can also use StringMatch which allows you to be more explicit about the comparison: rust accept_needle(StringMatch::from("test").case_insensitive()); accept_needle(StringMatch::from("tes").partial());

By default StringMatch matches the whole string and is case sensitive (safety by default).

And finally there is the StringMatchable trait that is implemented for String and &str: rust accept_needle("test".match_case_insensitive()); accept_needle("tes".match_partial());

Using Dynamic Dispatch

This pattern is slightly slower but generates less code, slightly smaller binary.

rust fn accept_needle(needle: &dyn Needle) -> bool { needle.is_match("Test") }

And now all of the following will work: rust accept_needle(&"Test"); accept_needle(&String::from("Test")); accept_needle(&Regex::new("Test").unwrap()); accept_needle(&Regex::new(r"^T.+t$").unwrap()); accept_needle(&StringMatch::from("test").case_insensitive()); accept_needle(&StringMatch::from("tes").partial());

LICENSE

This work is licensed under MIT.

SPDX-License-Identifier: MIT