Skip to main content

Crate reclone

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§

cloned
The cloned macro