From bcbc14ed17094ab873db6c50cb1b49092b03d3f4 Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Thu, 22 Feb 2018 03:07:27 -0600 Subject: [PATCH] implement a simple cache for autolink module --- src/modules/autolink.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/modules/autolink.rs b/src/modules/autolink.rs index 1394d80..37f626d 100644 --- a/src/modules/autolink.rs +++ b/src/modules/autolink.rs @@ -15,6 +15,7 @@ use stc::searchers::mtg::{MtgCard, MtgSearcher}; use stc::searchers::mediawiki::MediawikiSearcher; use regex::Regex; +use std::collections::BTreeMap; pub struct AutolinkModule {} @@ -89,14 +90,17 @@ impl EventLoop for AutolinkModule { searchers.add_searcher("gcl", Box::new(MediawikiSearcher::new(String::from("https://glitchcity.info/wiki/")))); searchers.add_searcher("wp", Box::new(MediawikiSearcher::new(String::from("https://en.wikipedia.org/wiki/")))); + let mut searcher_cache = BTreeMap::new(); + loop { match receiver.recv() { Ok(envelope) => { if let Event::Message { ref message } = envelope.event { debug!("Received message from module {:?}... {:?}", envelope.from, message.content); for cap in link_regex.captures_iter(&message.content) { - if let Some(item) = searchers.exact_search(&cap[1]) { - print_any_link(&item, message); + let term = cap[1].to_owned(); + if let &mut Some(ref mut item) = searcher_cache.entry(term.to_owned()).or_insert_with(|| searchers.exact_search(&term)) { + print_any_link(item, message); if let Some(card) = item.downcast_ref::() { print_mtg_card(card, message); } else if let Some(card) = item.downcast_ref::() {