Funky allows you to fire any function that implements Sync + Send quickly into a thread. The thread takes ownership of any arguments passed into the macro.
The macro returns a mpsc::Receiver on which you can block until you have the result.
Don't use this in production code! These are native threads. This is just an exploration in macro usage.
Add to your Cargo.toml
funky = "*"
And run cargo install
Add to your main or lib file:
#[macro_use]
extern crate funky;
An example with no arguments:
let func = || -> String {
"abc".to_string()
};
let rx = funky!(func);
assert_eq!(rx.recv().unwrap(), "abc".to_string())
And with many arguments:
let func = |string: String| -> String {
string
};
let rx = funky!(func, "abc".to_string());
assert_eq!(rx.recv().unwrap(), "abc".to_string())