let func_name = String::from("tree_sitter_") + ⟨ let libraries = LANG_LIBRARIES.get_or_init(|| Mutex::new(HashMap::new())); let languages = LANG_LANGUAGES.get_or_init(|| Mutex::new(HashMap::new())); unsafe { let mut libraries = libraries.lock().unwrap(); let lib = libraries.entry(lang.to_string()).or_insert_with(|| { let loaded = Library::new(path).expect("Failed to load library"); loaded }); let func: libloading::Symbol<unsafe extern "C" fn() -> *const TSLanguage> = lib.get(func_name.as_bytes()).unwrap(); language = tree_sitter::Language::from_raw(func()); let mut languages = languages.lock().unwrap(); languages.insert(lang.to_string(), language); }; }