use std::any::Any;
use std::sync::{OnceLock, RwLock};
static CURRENT: OnceLock<RwLock<Box<dyn Any + Send + Sync>>> = OnceLock::new();
#[doc(hidden)]
pub fn set_current_locale<L: Copy + Send + Sync + 'static>(locale: L) {
let lock = CURRENT.get_or_init(|| RwLock::new(Box::new(locale)));
*lock.write().unwrap() = Box::new(locale);
}
#[doc(hidden)]
pub fn get_current_locale<L: Copy + Send + Sync + Default + 'static>() -> L {
match CURRENT.get() {
Some(lock) => *lock.read().unwrap().downcast_ref::<L>().expect(
"rust_intl: get_current_locale::<L>() called with a different \
locale type than set_current_locale() was called with",
),
None => L::default(),
}
}