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