use crate::traits::Adapter;
use std::collections::HashMap;
use std::sync::Arc;
#[derive(Default)]
pub struct AdapterRegistry {
by_id: HashMap<String, Arc<dyn Adapter>>,
}
impl AdapterRegistry {
pub fn new() -> Self {
Self::default()
}
pub fn register(&mut self, adapter: Arc<dyn Adapter>) {
let key = adapter.id().as_str().to_string();
self.by_id.insert(key, adapter);
}
pub fn get(&self, id: &str) -> Option<Arc<dyn Adapter>> {
self.by_id.get(id).cloned()
}
pub fn all(&self) -> Vec<Arc<dyn Adapter>> {
self.by_id.values().cloned().collect()
}
}