mod.rs
55 lignes · 1526 octets
/// Discord OAuth provider implementation. pub mod discord; /// GitHub OAuth provider implementation. pub mod github; /// Google OIDC provider implementation. pub mod google; /// Microsoft OIDC provider implementation. pub mod microsoft; use super::provider_trait::OAuthProvider; use std::collections::HashMap; use std::sync::Arc; /// Registry of available OAuth providers, indexed by name. pub struct ProviderRegistry { providers: HashMap<String, Arc<dyn OAuthProvider>>, } impl ProviderRegistry { /// Create an empty provider registry. pub fn new() -> Self { Self { providers: HashMap::new(), } } /// Register an OAuth provider, replacing any existing registration with the same name. pub fn register(&mut self, provider: Arc<dyn OAuthProvider>) { self.providers.insert(provider.name().to_string(), provider); } /// Look up a provider by its name identifier. pub fn get(&self, name: &str) -> Option<&Arc<dyn OAuthProvider>> { self.providers.get(name) } /// Return a list of `(name, display_name)` pairs for all registered providers. pub fn list(&self) -> Vec<(&str, &str)> { self.providers .values() .map(|p| (p.name(), p.display_name())) .collect() } /// Return `true` if no providers are registered. pub fn is_empty(&self) -> bool { self.providers.is_empty() } } impl Default for ProviderRegistry { fn default() -> Self { Self::new() } }
GitRust