use std::sync::{Arc, OnceLock, RwLock};
use super::{Authorizer, MemoryStore, TupleStore};
#[doc(hidden)]
pub fn memory_store() -> Arc<dyn TupleStore> {
static STORE: OnceLock<Arc<MemoryStore>> = OnceLock::new();
STORE.get_or_init(|| Arc::new(MemoryStore::new())).clone()
}
fn slot() -> &'static RwLock<Option<Result<Authorizer, String>>> {
static CURRENT: OnceLock<RwLock<Option<Result<Authorizer, String>>>> = OnceLock::new();
CURRENT.get_or_init(Default::default)
}
#[doc(hidden)]
pub fn set_current(authorizer: Option<Result<Authorizer, String>>) {
*slot().write().unwrap_or_else(|e| e.into_inner()) = authorizer;
}
#[doc(hidden)]
pub fn current() -> Option<Result<Authorizer, String>> {
slot().read().unwrap_or_else(|e| e.into_inner()).clone()
}