// This file is part of ICU4X. For terms of use, please see the file // called LICENSE at the top level of the ICU4X source tree // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). use crate::LiteMap; use databake::*; /// Bakes a LiteMap into Rust code for fast runtime construction from data. Use this impl during /// code generation, such as in a `build.rs` script. /// /// For the most efficient bake, bake the [`LiteMap`] with a slice store. Use functions such as /// the following for converting an allocated [`LiteMap`] to a borrowing [`LiteMap`]: /// /// - [`LiteMap::to_borrowed_keys()`] /// - [`LiteMap::to_borrowed_values()`] /// - [`LiteMap::to_borrowed_keys_values()`] /// - [`LiteMap::as_sliced()`] /// /// # Examples /// /// ``` /// use databake::*; /// use litemap::LiteMap; /// /// // Construct the LiteMap fully owned and allocated: /// let mut litemap_alloc: LiteMap> = LiteMap::new_vec(); /// litemap_alloc.insert(1usize, "one".to_string()); /// litemap_alloc.insert(2usize, "two".to_string()); /// litemap_alloc.insert(10usize, "ten".to_string()); /// /// // Convert to a borrowed type for baking: /// let litemap_str: LiteMap> = /// litemap_alloc.to_borrowed_values(); /// let litemap_slice: LiteMap = litemap_str.as_sliced(); /// /// // The bake will now work for const construction: /// let mut ctx = Default::default(); /// println!( /// "const FOO: LiteMap = {};", /// litemap_slice.bake(&mut ctx) /// ); /// ``` impl Bake for LiteMap where S: Bake, { fn bake(&self, env: &CrateEnv) -> TokenStream { env.insert("litemap"); let store = self.values.bake(env); quote! { litemap::LiteMap::from_sorted_store_unchecked(#store) } } } #[test] fn test_baked_map() { // Const construction: test_bake!( LiteMap, const: crate::LiteMap::from_sorted_store_unchecked( &[ (1usize, "one"), (2usize, "two"), (10usize, "ten") ] ), litemap ); // Non-const construction: test_bake!( LiteMap>, crate::LiteMap::from_sorted_store_unchecked( alloc::vec![ (1usize, "one".to_owned()), (2usize, "two".to_owned()), (10usize, "ten".to_owned()), ] ), litemap ); }