Mountain/ApplicationState/State/ExtensionState/ProviderRegistration/
ProviderRegistration.rs1use std::{
34 collections::HashMap,
35 sync::{Arc, Mutex as StandardMutex},
36};
37
38use log::debug;
39
40use crate::ApplicationState::DTO::ProviderRegistrationDTO::ProviderRegistrationDTO;
41
42#[derive(Clone)]
44pub struct Registration {
45 pub LanguageProviders:Arc<StandardMutex<HashMap<u32, ProviderRegistrationDTO>>>,
47}
48
49impl Default for Registration {
50 fn default() -> Self {
51 debug!("[ProviderRegistration] Initializing default provider registration...");
52
53 Self { LanguageProviders:Arc::new(StandardMutex::new(HashMap::new())) }
54 }
55}
56
57impl Registration {
58 pub fn GetProviders(&self) -> HashMap<u32, ProviderRegistrationDTO> {
60 self.LanguageProviders
61 .lock()
62 .ok()
63 .map(|guard| guard.clone())
64 .unwrap_or_default()
65 }
66
67 pub fn GetProvider(&self, handle:u32) -> Option<ProviderRegistrationDTO> {
69 self.LanguageProviders.lock().ok().and_then(|guard| guard.get(&handle).cloned())
70 }
71
72 pub fn RegisterProvider(&self, handle:u32, provider:ProviderRegistrationDTO) {
74 if let Ok(mut guard) = self.LanguageProviders.lock() {
75 guard.insert(handle, provider);
76 debug!("[ProviderRegistration] Provider registered with handle: {}", handle);
77 }
78 }
79
80 pub fn UnregisterProvider(&self, handle:u32) {
82 if let Ok(mut guard) = self.LanguageProviders.lock() {
83 guard.remove(&handle);
84 debug!("[ProviderRegistration] Provider unregistered with handle: {}", handle);
85 }
86 }
87
88 pub fn GetProvidersForLanguage(&self, language:&str) -> Vec<ProviderRegistrationDTO> {
90 self.LanguageProviders
91 .lock()
92 .ok()
93 .map(|guard| guard.values().filter(|p| p.MatchesSelector("", language)).cloned().collect())
94 .unwrap_or_default()
95 }
96}