Rust macro to assist with cloning into closures/async blocks.
This is a slightly altered implementation of move expressions from this proposal.
Although curly braces also work, if parentheses are used (share!() and take!()), rustfmt can format the code inside the macro.
let _some_a = self.some_a.clone();
let _some_b = self.some_b.clone();
let _some_c = self.some_c.clone();
tokio::task::spawn(async move {
do_something(_some_a, _some_b, _some_c)
});tokio::task::spawn(share!(async {
do_something(
take!(self.some_a.clone()),
take!(self.some_b.clone()),
take!(self.some_c.clone()),
)
}));Same principle for async closures
let _some_a = self.some_a.clone();
let _some_b = self.some_b.clone();
let _some_c = self.some_c.clone();
set_ffi_callback(move || {
do_something(_some_a, _some_b, _some_c)
});set_ffi_callback(share!(|| {
do_something(
take!(self.some_a.clone()),
take!(self.some_b.clone()),
take!(self.some_c.clone()),
)
}));