Macro clones

Source
macro_rules! clones {
    (@clones $(,)? mut $obj:ident.$id:ident $( $tail:tt )*) => { ... };
    (@clones $(,)? $obj:ident.$id:ident $( $tail:tt )*) => { ... };
    (@clones $(,)? mut $id:ident $( $tail:tt )*) => { ... };
    (@clones $(,)? $id:ident $( $tail:tt )*) => { ... };
    (@clones) => { ... };
    ($( $tt:tt )*) => { ... };
}
Expand description

A helper macro which can be used to clone a list of variables. Helpful for creating a closure which clone-captures the environment.

ยงExample

let switch = use_state(|| true);
let counter = use_state(|| 0);

let cb = Callback::new({
  clones!(self.message, switch, mut counter);

  move |delta: i32| {
    if (*switch.value()) {
      println!("{}", message);
    }

    counter.set(|c| c + delta);
  }
});

This is equivalent to the following:

let switch = use_state(|| true);
let counter = use_state(|| 0);

let cb = Callback::new({
  let message = self.message.clone();
  let switch = switch.clone();
  let mut counter = counter.clone();

  move |delta: i32| {
    if (*switch.value()) {
      println!("{}", message);
    }

    counter.set(|c| c + delta);
  }
});