This crate provides a macro which lets you write closures that can capture individually either by moving, referencing, mutably referencing of cloning.
Start by adding an entry to your Cargo.toml
:
[dependencies]
closure = "0.3.0"
Then you can write closures like so:
use closure::closure;
let string = "move".to_string();
let x = 10;
let mut y = 20;
let rc = Rc::new(5);
let closure = closure!(move string, ref x, ref mut y, clone rc, |arg: i32| {
...
});