use once_cell::sync::Lazy; use std::collections::HashMap; use std::sync::RwLock; pub type SpawnServerFn = fn(tokio::io::DuplexStream, tokio::io::DuplexStream); static BUILTIN_REGISTRY: Lazy>> = Lazy::new(|| RwLock::new(HashMap::new())); /// Register a builtin extension into the global registry pub fn register_builtin_extension(name: &'static str, spawn_fn: SpawnServerFn) { BUILTIN_REGISTRY.write().unwrap().insert(name, spawn_fn); } /// Register multiple builtin extensions from a HashMap pub fn register_builtin_extensions(extensions: HashMap<&'static str, SpawnServerFn>) { let mut registry = BUILTIN_REGISTRY.write().unwrap(); registry.extend(extensions); } /// Get a copy of all registered builtin extensions pub fn get_builtin_extension(name: &str) -> Option { BUILTIN_REGISTRY.read().unwrap().get(name).cloned() }