use crate::compsys::ported::_message::_message;
use crate::ported::params::setaparam;
use std::collections::HashMap;
use std::sync::Mutex;
static REGEX_FUNCS: Mutex<Option<HashMap<String, Vec<String>>>> = Mutex::new(None);
fn registry() -> std::sync::MutexGuard<'static, Option<HashMap<String, Vec<String>>>> {
let mut g = REGEX_FUNCS.lock().unwrap();
if g.is_none() {
*g = Some(HashMap::new());
}
g
}
pub fn _regex_arguments(args: &[String]) -> i32 {
if args.is_empty() {
return 1;
}
let funcname = args[0].clone();
let regex: Vec<String> = args[1..].to_vec();
if let Some(map) = registry().as_mut() {
map.insert(funcname, regex);
}
0
}
pub fn dispatch_registered(funcname: &str) -> i32 {
let regex = {
let g = registry();
g.as_ref().and_then(|m| m.get(funcname).cloned())
};
let regex = match regex {
Some(r) => r,
None => return 1,
};
let _ = regex; setaparam("_ra_actions", Vec::new());
let _ = _message(&["no more arguments".to_string()]);
1
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn register_then_dispatch_returns_one_without_zregexparse() {
let _g = crate::test_util::global_state_lock();
assert_eq!(_regex_arguments(&["myfn".to_string(), "/foo/".to_string()]), 0);
assert_eq!(dispatch_registered("myfn"), 1);
}
#[test]
fn missing_registration_returns_one() {
let _g = crate::test_util::global_state_lock();
assert_eq!(dispatch_registered("never_registered"), 1);
}
}