#macro #no-std #development-tools #simple #rust-patterns

no-std shadow-clone

A macro to clone variables into the current scope shadowing old ones

7 releases (4 stable)

1.2.1 Apr 19, 2020
1.2.0 Apr 18, 2020
0.1.1 Jun 6, 2019
0.0.1 Jun 6, 2019

#377 in Rust patterns

Download history 46/week @ 2022-01-12 55/week @ 2022-01-19 88/week @ 2022-01-26 102/week @ 2022-02-02 72/week @ 2022-02-09 102/week @ 2022-02-16 44/week @ 2022-02-23 18/week @ 2022-03-02 40/week @ 2022-03-09 68/week @ 2022-03-16 78/week @ 2022-03-23 128/week @ 2022-03-30 53/week @ 2022-04-06 83/week @ 2022-04-13 44/week @ 2022-04-20 81/week @ 2022-04-27

262 downloads per month
Used in noughts-and-crosses

MIT/Apache

5KB

Shadow Clone

A macro to clone variables into the current scope shadowing old ones.

pipeline status Latest version Latest Docs License downloads-badge

Help

If you run into any issues or need help with using shadow-clone in your project please email incoming+efunb-shadow-clone-12722979-issue-@incoming.gitlab.com.

How to use

Add

shadow-clone = "1"

to your cargo.toml under [dependencies] and add

use shadow_clone::shadow_clone;

to your main file.

Examples

let s = "foo".to_string();
let c = move |x: i32| format!("{}{}", s, x);
let bar = s;

This will not compile as s has been moved into the closure.

This issue can be solved with this macro.

use shadow_clone::shadow_clone;
let s = "foo".to_string();
{
    shadow_clone!(s);
    let c = move |x: i32| format!("{}{}", s, x);
}
let bar = s;

That expands to,

use shadow_clone::shadow_clone;
let s = "foo".to_string();
{
    let s = s.clone();
    let c = move |x: i32| format!("{}{}", s, x);
}
let bar = s;

You can also clone multiple variables separated by commas: shadow_clone!(foo, bar);.

You can also bind a clone as mutable by prefixing with mut: shadow_clone!(mut foo);.

Docs

API Documentation

Warning

If you are viewing this from GitHub then this is a read only copy. Please contribute to the GitLab copy here.

No runtime deps