Crate reclone

source
Expand description

§Reclone

Minimal macro library to help with cloning objects into move closures

I’ve found that when building applications, you commonly have a set of Arcs representing
state of some sort, and need to move it into a move closure

This is annoying and leads to code like this:


let foo = ...;
let bar = ...;
let baz = ...;

{
    let foo = foo.clone();
    let bar = bar.clone();
    let baz = baz.clone();

    tokio::spawn(async move{
        // Use the variables
    });
}

Now with reclone, this becomes, in my opinion, a little neater and less repetitive

use reclone::cloned;

let foo = ...;
let bar = ...;
let baz = ...;


cloned!(foo, bar, baz, {
    tokio::spawn(async move{
        // Use the variables
    });
});

If you can’t justify bringing this in as a dependency, you’re welcome to directly inline
the code in your codebase

macro_rules! cloned {
    ($($var : ident ,)* $scope : block) => {
           {
               $(
                   let $var = $var.clone();
                )*
                $scope
        }
    }
}

Macros§