use crate::{Injectable, RwMap};
use std::{any::TypeId, collections::HashMap, sync::Arc};
pub trait Provider: Send + Sync {}
pub struct ProviderRegistry {
providers: RwMap<TypeId, Injectable>,
}
impl ProviderRegistry {
pub(crate) fn new() -> Self {
Self {
providers: RwMap::new(HashMap::new()),
}
}
pub fn register<T>(&self, provider: T)
where
T: Provider + 'static,
{
self.providers
.write()
.insert(TypeId::of::<T>(), Arc::new(provider));
}
pub(crate) fn get_providers(&self) -> &RwMap<TypeId, Injectable> {
&self.providers
}
}