use dashmap::DashMap;
use reqwest::Client;
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct ClientConfig {
pub base_url: String,
pub client: Client,
}
impl ClientConfig {
pub fn new(base_url: impl Into<String>, client: Client) -> Self {
Self {
base_url: base_url.into(),
client,
}
}
}
#[derive(Debug, Default, Clone)]
pub struct ClientRegistry {
clients: DashMap<String, Arc<ClientConfig>>,
}
impl ClientRegistry {
pub fn new() -> Self {
Self {
clients: DashMap::new(),
}
}
pub fn register(&self, name: impl Into<String>, config: ClientConfig) -> &Self {
self.clients.insert(name.into(), Arc::new(config));
self
}
pub fn get(&self, name: &str) -> Option<Arc<ClientConfig>> {
self.clients
.get(name)
.map(|entry| Arc::clone(entry.value()))
}
}