Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

share-rc

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.

Usage

Async blocks

Before

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)
});

After

tokio::task::spawn(share!(async {
    do_something(
        take!(self.some_a.clone()),
        take!(self.some_b.clone()),
        take!(self.some_c.clone()),
    )
}));

Closures

Same principle for async closures

Before

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)
});

After

set_ffi_callback(share!(|| {
    do_something(
        take!(self.some_a.clone()),
        take!(self.some_b.clone()),
        take!(self.some_c.clone()),
    )
}));

About

Rust macro to assist with cloning into closures

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages