1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use crate::MinosCodexError;
use regex::Regex;
use std::collections::HashMap;

pub struct RegexCache {
    cache: HashMap<String, Regex>,
}

impl RegexCache {
    pub fn new() -> Self {
        RegexCache {
            cache: HashMap::new(),
        }
    }

    pub fn get_or_insert(&mut self, pattern: &str) -> Result<&Regex, MinosCodexError> {
        if !self.cache.contains_key(pattern) {
            let regex = Regex::new(pattern)?;
            self.cache.insert(pattern.to_string(), regex);
        }
        Ok(self.cache.get(pattern).unwrap())
    }
}