Fix provider separation

This commit is contained in:
Ara Sadoyan
2026-10-05 19:06:44 +02:00
parent ab5252ee52
commit dad9539b9c
+6 -6
View File
@@ -9,10 +9,10 @@ pub struct DnsBackendPlugin {
inventory::collect!(DnsBackendPlugin); inventory::collect!(DnsBackendPlugin);
static PROVIDERS: LazyLock<HashMap<&'static str, Box<dyn DnsProvider>>> = LazyLock::new(|| { static FACTORIES: LazyLock<HashMap<&'static str, fn() -> Box<dyn DnsProvider>>> = LazyLock::new(|| {
let mut map = HashMap::new(); let mut map = HashMap::new();
for plugin in inventory::iter::<DnsBackendPlugin> { for plugin in inventory::iter::<DnsBackendPlugin> {
map.insert(plugin.name, (plugin.factory)()); map.insert(plugin.name, plugin.factory);
} }
map map
}); });
@@ -24,9 +24,9 @@ pub trait DnsProvider: Send + Sync {
async fn delete_txt_record(&self, record_id: &str, record_name: &str) -> Result<(), Box<dyn std::error::Error + Send + Sync>>; async fn delete_txt_record(&self, record_id: &str, record_name: &str) -> Result<(), Box<dyn std::error::Error + Send + Sync>>;
} }
pub fn get_provider(provider: String) -> &'static dyn DnsProvider { pub fn get_provider(provider: String) -> Box<dyn DnsProvider> {
PROVIDERS FACTORIES
.get(provider.as_str()) .get(provider.as_str())
.map(|boxed| boxed.as_ref()) .map(|factory| factory())
.unwrap_or_else(|| panic!("Unknown DNS provider '{}'. Available providers: {:?}", provider, PROVIDERS.keys().collect::<Vec<_>>())) .unwrap_or_else(|| panic!("Unknown DNS provider '{}'. Available providers: {:?}", provider, FACTORIES.keys().collect::<Vec<_>>()))
} }