sort/
sort.rs

1use regex_specificity::get;
2
3fn main() {
4    let string = "alice@myprovider.com";
5
6    // You must ensure that the pattern fully matches the string before calling
7    let patterns = vec![
8        r".*",
9        r"[a-z]+@[a-z]+\.[a-z]+",
10        r"alice@[a-z]+\.[a-z]+",
11    ];
12
13    let mut results: Vec<(&str, u64)> = Vec::new();
14
15    for pattern in patterns {
16        if let Ok(score) = get(string, pattern) {
17            results.push((pattern, score));
18        }
19    }
20
21    results.sort_by(|(_, a), (_, b)| b.cmp(a));
22
23    print(string, results);
24}
25
26fn print(string: &str, results: Vec<(&str, u64)>) {
27    const RW: usize = 12;
28    const PW: usize = 40;
29
30    println!("Target String: '{}'", string);
31    println!("┌{:─^rw$}┬{:─^pw$}┐", "─", "─", rw = RW, pw = PW);
32    println!(
33        "│ {:<rw$} │ {:<pw$} │",
34        "Result",
35        "Pattern",
36        rw = RW - 2,
37        pw = PW - 2
38    );
39    println!("├{:─^rw$}┼{:─^pw$}┤", "─", "─", rw = RW, pw = PW);
40    for (pattern, result) in results {
41        println!(
42            "│ {:<rw$} │ {:<pw$} │",
43            result,
44            pattern,
45            rw = RW - 2,
46            pw = PW - 2
47        );
48    }
49    println!("└{:─^rw$}┴{:─^pw$}┘", "─", "─", rw = RW, pw = PW);
50}