Skip to main content

sprite_core/
registry.rs

1use std::collections::HashMap;
2use parking_lot::RwLock;
3
4/// Named actor registry. Look up actors by human-readable names.
5pub struct Registry {
6    names: RwLock<HashMap<String, u64>>,
7}
8
9impl Registry {
10    pub(crate) fn new() -> Self {
11        Self { names: RwLock::new(HashMap::new()) }
12    }
13    pub(crate) fn register(&self, name: &str, id: u64) {
14        self.names.write().insert(name.to_string(), id);
15    }
16    pub(crate) fn unregister(&self, name: &str) {
17        self.names.write().remove(name);
18    }
19    pub fn lookup(&self, name: &str) -> Option<u64> {
20        self.names.read().get(name).copied()
21    }
22    pub fn contains(&self, name: &str) -> bool {
23        self.names.read().contains_key(name)
24    }
25    pub fn names(&self) -> Vec<String> {
26        self.names.read().keys().cloned().collect()
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33    #[test]
34    fn register_and_lookup() {
35        let reg = Registry::new();
36        reg.register("logger", 1);
37        assert_eq!(reg.lookup("logger"), Some(1));
38        assert!(reg.contains("logger"));
39        reg.unregister("logger");
40        assert!(!reg.contains("logger"));
41    }
42}