Skip to main content

evolve_adapters/
registry.rs

1//! Runtime registry mapping adapter ids to adapter instances.
2
3use crate::traits::Adapter;
4use std::collections::HashMap;
5use std::sync::Arc;
6
7/// Collection of registered adapters keyed by their string id.
8#[derive(Default)]
9pub struct AdapterRegistry {
10    by_id: HashMap<String, Arc<dyn Adapter>>,
11}
12
13impl AdapterRegistry {
14    /// Construct an empty registry.
15    pub fn new() -> Self {
16        Self::default()
17    }
18
19    /// Register an adapter. Overwrites any existing registration.
20    pub fn register(&mut self, adapter: Arc<dyn Adapter>) {
21        let key = adapter.id().as_str().to_string();
22        self.by_id.insert(key, adapter);
23    }
24
25    /// Look up by id.
26    pub fn get(&self, id: &str) -> Option<Arc<dyn Adapter>> {
27        self.by_id.get(id).cloned()
28    }
29
30    /// All registered adapters.
31    pub fn all(&self) -> Vec<Arc<dyn Adapter>> {
32        self.by_id.values().cloned().collect()
33    }
34}