like AnyMap
, but with functions instead of values
This crate began with an idle thought: "Crates like AnyMap
let you store one value of each type.
What would it take to instead store a function that took that type, like a message handler?" What
came out was this.
The basic idea is that you start with a message type, and a function that receives it by-value:
struct MyMessage;
fn handle_msg(_: MyMessage) {
println!("Got your message!");
}
Then, take one of these HandlerMap
s, and hand it the handler:
let mut map = HandlerMap::new();
map.insert(handle_msg);
This registers that type in the handler so you can call it later:
map.call(MyMessage);
// console prints "Got your message!"
To use this in your crate, add the following to your Cargo.toml:
[dependencies]
handler_map = "0.1.0"
Then add the following to your crate itself (if on 2015 edition):
extern crate handler_map;