use {
reovim_kernel::api::v1::Service,
std::{
fmt,
sync::{Arc, RwLock},
},
};
use crate::provider::GitProvider;
pub struct GitProviderStore {
inner: RwLock<Option<Arc<dyn GitProvider>>>,
}
impl fmt::Debug for GitProviderStore {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("GitProviderStore")
.field("registered", &self.inner.read().unwrap().is_some())
.finish()
}
}
impl GitProviderStore {
#[must_use]
pub fn new() -> Self {
Self {
inner: RwLock::new(None),
}
}
pub fn register(&self, provider: Arc<dyn GitProvider>) {
*self.inner.write().unwrap() = Some(provider);
}
#[must_use]
pub fn get(&self) -> Option<Arc<dyn GitProvider>> {
self.inner.read().unwrap().clone()
}
}
impl Default for GitProviderStore {
fn default() -> Self {
Self::new()
}
}
impl Service for GitProviderStore {}