cookie_agent_config/
wildcard.rs1#[must_use]
3pub fn simple_wildcard_match(pattern: &str, resource: &str) -> bool {
4 wildcard_match(pattern, resource)
5 || pattern
6 .strip_suffix(" *")
7 .is_some_and(|prefix| wildcard_match(prefix, resource))
8}
9fn wildcard_match(pattern: &str, resource: &str) -> bool {
10 let pattern = pattern.chars().collect::<Vec<_>>();
11 let resource = resource.chars().collect::<Vec<_>>();
12 let (mut p, mut r, mut star, mut retry) = (0, 0, None, 0);
13 while r < resource.len() {
14 if p < pattern.len() && (pattern[p] == '?' || pattern[p] == resource[r]) {
15 p += 1;
16 r += 1;
17 } else if p < pattern.len() && pattern[p] == '*' {
18 star = Some(p);
19 p += 1;
20 retry = r;
21 } else if let Some(index) = star {
22 p = index + 1;
23 retry += 1;
24 r = retry;
25 } else {
26 return false;
27 }
28 }
29 while p < pattern.len() && pattern[p] == '*' {
30 p += 1;
31 }
32 p == pattern.len()
33}