#clone #utility #no-alloc

no-std reclone

Simple utility library for creating a new scope with a set of cloned variables

4 releases

0.1.3 Oct 20, 2024
0.1.2 Oct 20, 2024
0.1.1 Oct 20, 2024
0.1.0 Oct 20, 2024

#145 in No standard library

MIT license

5KB

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

No runtime deps