use once_cell::sync::Lazy;
use redis::AddressResolver;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
static REGISTRY: Lazy<RwLock<HashMap<String, Arc<dyn AddressResolver>>>> =
Lazy::new(|| RwLock::new(HashMap::new()));
pub fn register(
key: String,
resolver: Arc<dyn AddressResolver>,
) -> Option<Arc<dyn AddressResolver>> {
let mut registry = REGISTRY
.write()
.expect("Failed to acquire registry write lock");
registry.insert(key, resolver)
}
pub fn remove(key: &str) -> Option<Arc<dyn AddressResolver>> {
let mut registry = REGISTRY
.write()
.expect("Failed to acquire registry write lock");
registry.remove(key)
}
pub fn get(key: &str) -> Option<Arc<dyn AddressResolver>> {
let registry = REGISTRY
.read()
.expect("Failed to acquire registry read lock");
registry.get(key).cloned()
}