Don't repeatedly recompile regular expression in sharedmodel number parsing master
authorJakob Cornell <jakob+gpg@jcornell.net>
Mon, 22 Jan 2024 01:12:52 +0000 (19:12 -0600)
committerJakob Cornell <jakob+gpg@jcornell.net>
Mon, 22 Jan 2024 01:12:52 +0000 (19:12 -0600)
sharedmodel/Cargo.toml
sharedmodel/src/lib.rs
sharedmodel/src/update_parse.rs

index fb0b7fd737d047329fc7c024af3708b8febbfd33..0222675c08893c76030ed828b9094edffc2cd886 100644 (file)
@@ -19,6 +19,7 @@ uuid = "0.8"
 html5ever = "0.25"
 string_cache = "0.8"
 anyhow = "^1.0.31"
 html5ever = "0.25"
 string_cache = "0.8"
 anyhow = "^1.0.31"
+lazy_static = "*"
 
 # no need for Unicode support
 #fancy-regex = { version = "^0.7.0", default-features = false, features = ["perf"] }
 
 # no need for Unicode support
 #fancy-regex = { version = "^0.7.0", default-features = false, features = ["perf"] }
index a1dc2f4dd9e7537f9bbb1ef96f979a6ec48a76b1..1568ffaee622705004f48d0dbe133b932780c8da 100644 (file)
@@ -1,3 +1,6 @@
+#[macro_use]
+extern crate lazy_static;
+
 mod live_event_buffer;
 mod html;
 mod html_html5ever;
 mod live_event_buffer;
 mod html;
 mod html_html5ever;
index 974e75f49b4351ca98a9c5046f7339ee16d94549..6993bca89a137c05386be1b6a4a2a90dc2bbc1e8 100644 (file)
@@ -140,6 +140,12 @@ pub fn parse_update(
        Ok(parse_from_lines(&stripped_lines, curr_count, bot_user))
 }
 
        Ok(parse_from_lines(&stripped_lines, curr_count, bot_user))
 }
 
+lazy_static! {
+       static ref LINE_PATTERN: fancy_regex::Regex = fancy_regex::Regex::new(
+               "^(?P<v>v)?(?P<neg>-)?(?P<num>[0-9]+((?P<sep>[,. \u{2009}]|, )[0-9]+((?P=sep)[0-9]+)*)?)"
+       ).unwrap();
+}
+
 fn parse_from_lines(lines: &[impl Borrow<str>], curr_count: Option<Count>, bot_user: &str) -> ParsedUpdate {
        let command = lines.iter().find_map(|l| parse_command(l.borrow(), bot_user));
 
 fn parse_from_lines(lines: &[impl Borrow<str>], curr_count: Option<Count>, bot_user: &str) -> ParsedUpdate {
        let command = lines.iter().find_map(|l| parse_command(l.borrow(), bot_user));
 
@@ -154,11 +160,8 @@ fn parse_from_lines(lines: &[impl Borrow<str>], curr_count: Option<Count>, bot_u
        } else {
                // look for groups of ASCII digits (as many as possible) separated by a uniform separator
                // from the valid set
        } else {
                // look for groups of ASCII digits (as many as possible) separated by a uniform separator
                // from the valid set
-               let pattern = fancy_regex::Regex::new(
-                       "^(?P<v>v)?(?P<neg>-)?(?P<num>[0-9]+((?P<sep>[,. \u{2009}]|, )[0-9]+((?P=sep)[0-9]+)*)?)"
-               ).unwrap();
-               let match_result = pattern
-                       .captures(lines[0].borrow())
+               let match_result =
+                       LINE_PATTERN.captures(lines[0].borrow())
                        .with_context(|| format!("parsing line {:?}", lines[0].borrow()))
                        .unwrap();
                if let Some(ref match_) = match_result {
                        .with_context(|| format!("parsing line {:?}", lines[0].borrow()))
                        .unwrap();
                if let Some(ref match_) = match_result {