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