evolve_adapters/
registry.rs1use crate::traits::Adapter;
4use std::collections::HashMap;
5use std::sync::Arc;
6
7#[derive(Default)]
9pub struct AdapterRegistry {
10 by_id: HashMap<String, Arc<dyn Adapter>>,
11}
12
13impl AdapterRegistry {
14 pub fn new() -> Self {
16 Self::default()
17 }
18
19 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 pub fn get(&self, id: &str) -> Option<Arc<dyn Adapter>> {
27 self.by_id.get(id).cloned()
28 }
29
30 pub fn all(&self) -> Vec<Arc<dyn Adapter>> {
32 self.by_id.values().cloned().collect()
33 }
34}