diff --git a/subjects/macro_map/README.md b/subjects/macro_map/README.md new file mode 100644 index 000000000..20dfce61e --- /dev/null +++ b/subjects/macro_map/README.md @@ -0,0 +1,50 @@ +## macro_map + +### Instructions + +Create a macro rule called `hash_map` to initialize and declare an `HashMap` at the same time, very similar to what `vec!` macro does for `Vector`. + +> Your macro should accept both leading commas and non leading commas syntax to be more flexible in terms of coding style and reflect the language general style. + +### Expected Macro + +```rust +macro_rules! hash_map { +} +``` + +### Usage + +Here is a possible program to test your function, + +```rust +use macro_map::hash_map; +use std::collections::HashMap; + +fn main() { + let empty: HashMap = hash_map!(); + let new = hash_map!('a' => 22, 'b' => 1, 'c' => 10); + let nested = hash_map!( + "first" => hash_map!( + "Rob" => 32.2, + "Gen" => 44.1, + "Chris" => 10., + ), + "second" => hash_map!() + ); + println!("{:?}", empty); + println!("{:?}", new); + println!("{:?}", nested); +} +``` + +And its output: + +```console +$ cargo run +{} +{'b': 1, 'a': 22, 'c': 10} +{"first": {"Rob": 32.2, "Gen": 44.1, "Chris": 10.0}, "second": {}} +$ +``` +