use std::time::Instant;
use basic_pattern_matcher::PatternMatcher;
fn main() {
let mut matcher: PatternMatcher<u32> = PatternMatcher::new();
let patterns_with_ids = [
("stock.nyse.*.price", 101u32),
("stock.**.price", 101u32),
("stock.nasdaq.aapl.price", 102u32),
("stock.*.ibm.price", 103u32),
("stock.nyse.**", 104u32),
("stock.**", 105u32),
("finance.#", 106u32), ("*.nyse.ibm.*", 107u32),
("**.price", 108u32),
("stock.nyse.ibm.volume", 109u32),
];
println!("--- Adding Patterns ---");
for (pattern, id) in &patterns_with_ids {
let start = Instant::now();
matcher.add_pattern(pattern, *id); let elapsed = start.elapsed();
println!("Added pattern: {:<30} ID: {} Time: {:?}", pattern, id, elapsed);
}
let topics = [
"stock.nyse.ibm.price",
"stock.nasdaq.aapl.price",
"stock.nyse.msft.price",
"stock.nyse.ibm.volume",
"stock.foo.bar.baz.qux", "finance.load", "other.nyse.ibm.price", "something.completely.different",
"stock.price", "stock.nyse.goog.data", ];
println!("--- Matching Topics ---");
for topic in &topics {
let start = Instant::now();
let matches = matcher.match_topic(topic); let elapsed = start.elapsed();
let formatted_matches: Vec<String> = matches
.iter()
.map(|(p, id)| format!("(\"{}\", {})", p, id))
.collect();
println!(
"Topic: {:<30} Matches: [{}] Time: {:?}",
topic,
formatted_matches.join(", "), elapsed
);
}
}