macro_rules! map { ($($key:ident $(: $value:expr)?),*) => { ... }; (@map_one $key:ident) => { ... }; (@map_one $key:ident : $value:expr) => { ... }; }