1 // This file is part of ICU4X. For terms of use, please see the file
2 // called LICENSE at the top level of the ICU4X source tree
3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4 
5 // LiteMap is intended as a small and low-memory drop-in replacement for
6 // HashMap. This example demonstrates how it works with Serde.
7 
8 #![no_main] // https://github.com/unicode-org/icu4x/issues/395
9 icu_benchmark_macros::instrument!();
10 
11 use litemap::LiteMap;
12 
13 const DATA: [(&str, &str); 11] = [
14     ("ar", "Arabic"),
15     ("bn", "Bangla"),
16     ("ccp", "Chakma"),
17     ("en", "English"),
18     ("es", "Spanish"),
19     ("fr", "French"),
20     ("ja", "Japanese"),
21     ("ru", "Russian"),
22     ("sr", "Serbian"),
23     ("th", "Thai"),
24     ("tr", "Turkish"),
25 ];
26 
27 const POSTCARD: [u8; 117] = [
28     11, 2, 97, 114, 6, 65, 114, 97, 98, 105, 99, 2, 98, 110, 6, 66, 97, 110, 103, 108, 97, 3, 99,
29     99, 112, 6, 67, 104, 97, 107, 109, 97, 2, 101, 110, 7, 69, 110, 103, 108, 105, 115, 104, 2,
30     101, 115, 7, 83, 112, 97, 110, 105, 115, 104, 2, 102, 114, 6, 70, 114, 101, 110, 99, 104, 2,
31     106, 97, 8, 74, 97, 112, 97, 110, 101, 115, 101, 2, 114, 117, 7, 82, 117, 115, 115, 105, 97,
32     110, 2, 115, 114, 7, 83, 101, 114, 98, 105, 97, 110, 2, 116, 104, 4, 84, 104, 97, 105, 2, 116,
33     114, 7, 84, 117, 114, 107, 105, 115, 104,
34 ];
35 
36 /// Run this function to print new data to the console.
37 #[allow(dead_code)]
generate()38 fn generate() {
39     let mut map = LiteMap::new_vec();
40     for (lang, name) in DATA.iter() {
41         map.try_append(lang, name).ok_or(()).unwrap_err();
42     }
43 
44     let buf = postcard::to_stdvec(&map).unwrap();
45     println!("{buf:?}");
46 }
47 
main()48 fn main() {
49     // Uncomment the following line to re-generate the binary data.
50     // generate();
51 
52     let map: LiteMap<&str, &str> = postcard::from_bytes(&POSTCARD).unwrap();
53     assert_eq!(map.get("tr"), Some(&"Turkish"));
54 }
55