silkenweb_reactive/lib.rs
1//! Various primitives to make your code reactive to upstream updates.
2#![allow(
3 clippy::missing_panics_doc,
4 clippy::missing_errors_doc,
5 clippy::must_use_candidate,
6 clippy::module_name_repetitions
7)]
8pub mod accumulators;
9pub mod memo;
10pub mod signal;
11
12/// Clone all the identifiers supplied as arguments.
13///
14/// `clone!(x, y, z);` will generate:
15///
16/// ```
17/// # #[macro_use] extern crate silkenweb_reactive;
18/// # let (x, y, z) = (0, 0, 0);
19/// let x = x.clone();
20/// let y = y.clone();
21/// let z = z.clone();
22/// ```
23///
24/// This is useful for capturing variables by copy in closures. For example:
25///
26/// ```
27/// # #[macro_use] extern crate silkenweb_reactive;
28/// # let (x, y, z) = (0, 0, 0);
29/// # let signal = vec![0].into_iter();
30/// # fn do_something(x: u32, y: u32, z: u32) {}
31/// signal.map({
32/// clone!(x, y, z);
33/// move |_| do_something(x, y, z)
34/// });
35/// ```
36#[macro_export]
37macro_rules! clone{
38 ($($name:ident),* $(,)?) => {
39 $(
40 let $name = $name.clone();
41 )*
42 }
43}