str-match

Match str with pattern like format!.

Usage

```rust use strmatch::strmatch;

fn f(a: &str) -> &str{ str_match! { match a { "abc{a}ghi" => a, "aaa{bb}" => bb, "{{{x}}}" => x, _ => "!", } } }

asserteq!(f("abcdefghi"), "def"); asserteq!(f("aaabbbccc"), "bbbccc"); asserteq!(f("{000}"), "000"); asserteq!(f("xyz"), "!"); ```

You can use "attribute" features in nightly.

``rust // withstr-match.features = ["attribute"]` in Cargo.toml

![feature(stmtexprattributes, procmacrohygiene)]

use strmatch::strmatch;

fn f(a: &str) -> &str{ #[str_match] match a { "abc{x}ghi" => x, "aaa{x}" => x, "{{{x}}}" => x, _ => "!", } } ```

Limitations

This macro converts &str to &[u8] and use match slice pattern. For example, "abc{x}ghi" pattern is converted to [b'a', b'b', b'c', x @ .., b'g', b'h', b'i' ]. Because two or more variadic patterns are not allowed in slice pattern, only zero or one placeholder in str pattern is also allowed.

This macro can use single &str matching, complex pattern (like (&str, &str)) is not supported.