use std::collections::HashSet;
use std::sync::LazyLock;
use parking_lot::RwLock;
static LOADED_FAMILIES: LazyLock<RwLock<HashSet<&'static str>>> =
LazyLock::new(|| RwLock::new(HashSet::new()));
pub fn register_loaded_family(family: &str) {
if family.is_empty() {
return;
}
let Some(interned) = crate::widget::helpers::intern_font_family_public(family) else {
return;
};
LOADED_FAMILIES.write().insert(interned);
}
pub fn is_loaded(family: &str) -> bool {
LOADED_FAMILIES.read().contains(family)
}
#[doc(hidden)]
pub fn reset_for_tests() {
LOADED_FAMILIES.write().clear();
}
#[cfg(test)]
mod tests {
use super::*;
use std::sync::Mutex;
static TEST_LOCK: Mutex<()> = Mutex::new(());
#[test]
fn registering_family_makes_it_loaded() {
let _guard = TEST_LOCK.lock().unwrap();
reset_for_tests();
register_loaded_family("Inter");
assert!(is_loaded("Inter"));
}
#[test]
fn empty_name_is_not_stored() {
let _guard = TEST_LOCK.lock().unwrap();
reset_for_tests();
register_loaded_family("");
assert!(!is_loaded(""));
}
#[test]
fn repeated_registration_is_idempotent() {
let _guard = TEST_LOCK.lock().unwrap();
reset_for_tests();
register_loaded_family("Roboto");
register_loaded_family("Roboto");
assert!(is_loaded("Roboto"));
}
}