use super::provider::ProjectResolutionProvider;
use std::sync::Arc;
pub trait ResolutionProviderRegistry {
fn providers(&self) -> &[Arc<dyn ProjectResolutionProvider>];
}
pub struct SimpleProviderRegistry {
providers: Vec<Arc<dyn ProjectResolutionProvider>>,
}
impl Default for SimpleProviderRegistry {
fn default() -> Self {
Self::new()
}
}
impl SimpleProviderRegistry {
pub fn new() -> Self {
Self {
providers: Vec::new(),
}
}
pub fn add(&mut self, provider: Arc<dyn ProjectResolutionProvider>) {
self.providers.push(provider);
}
pub fn active_providers(
&self,
settings: &crate::config::Settings,
) -> Vec<Arc<dyn ProjectResolutionProvider>> {
self.providers
.iter()
.filter(|p| p.is_enabled(settings))
.cloned()
.collect()
}
}
impl ResolutionProviderRegistry for SimpleProviderRegistry {
fn providers(&self) -> &[Arc<dyn ProjectResolutionProvider>] {
&self.providers
}
}