1ef40d7f6Sopenharmony_ciextern crate once_cell; 2ef40d7f6Sopenharmony_ci 3ef40d7f6Sopenharmony_ciuse once_cell::sync::{Lazy, OnceCell}; 4ef40d7f6Sopenharmony_ciuse std::collections::HashMap; 5ef40d7f6Sopenharmony_ci 6ef40d7f6Sopenharmony_cistatic HASHMAP: Lazy<HashMap<u32, &'static str>> = Lazy::new(|| { 7ef40d7f6Sopenharmony_ci let mut m = HashMap::new(); 8ef40d7f6Sopenharmony_ci m.insert(0, "foo"); 9ef40d7f6Sopenharmony_ci m.insert(1, "bar"); 10ef40d7f6Sopenharmony_ci m.insert(2, "baz"); 11ef40d7f6Sopenharmony_ci m 12ef40d7f6Sopenharmony_ci}); 13ef40d7f6Sopenharmony_ci 14ef40d7f6Sopenharmony_ci// Same, but completely without macros 15ef40d7f6Sopenharmony_cifn hashmap() -> &'static HashMap<u32, &'static str> { 16ef40d7f6Sopenharmony_ci static INSTANCE: OnceCell<HashMap<u32, &'static str>> = OnceCell::new(); 17ef40d7f6Sopenharmony_ci INSTANCE.get_or_init(|| { 18ef40d7f6Sopenharmony_ci let mut m = HashMap::new(); 19ef40d7f6Sopenharmony_ci m.insert(0, "foo"); 20ef40d7f6Sopenharmony_ci m.insert(1, "bar"); 21ef40d7f6Sopenharmony_ci m.insert(2, "baz"); 22ef40d7f6Sopenharmony_ci m 23ef40d7f6Sopenharmony_ci }) 24ef40d7f6Sopenharmony_ci} 25ef40d7f6Sopenharmony_ci 26ef40d7f6Sopenharmony_cifn main() { 27ef40d7f6Sopenharmony_ci // First access to `HASHMAP` initializes it 28ef40d7f6Sopenharmony_ci println!("The entry for `0` is \"{}\".", HASHMAP.get(&0).unwrap()); 29ef40d7f6Sopenharmony_ci 30ef40d7f6Sopenharmony_ci // Any further access to `HASHMAP` just returns the computed value 31ef40d7f6Sopenharmony_ci println!("The entry for `1` is \"{}\".", HASHMAP.get(&1).unwrap()); 32ef40d7f6Sopenharmony_ci 33ef40d7f6Sopenharmony_ci // The same works for function-style: 34ef40d7f6Sopenharmony_ci assert_eq!(hashmap().get(&0), Some(&"foo")); 35ef40d7f6Sopenharmony_ci assert_eq!(hashmap().get(&1), Some(&"bar")); 36ef40d7f6Sopenharmony_ci} 37