web_component/closure/
mod.rs

1#[macro_export]
2macro_rules! capture {
3    ($($name:ident),* => $body:expr) => {
4        {
5            $(let $name = $name.clone();)*
6            $body
7        }
8    };
9}
10
11#[macro_export]
12macro_rules! capture_async {
13    ($($name:ident),* => async move $body:block) => {
14        {
15            $(let $name = $name.clone();)*
16            async move { $body }
17        }
18    };
19}
20
21#[macro_export]
22macro_rules! event {
23    ($($name:ident),* => async move |$input:ident: $type_:ty| $body:block) => {
24        {
25            $(let $name = $name.clone();)*
26            move |$input: $type_| {
27                $(let $name = $name.clone();)*
28                $crate::prelude::wasm_bindgen_futures::spawn_local(async move {
29                    $body
30                })
31            }
32        }
33    };
34    ($($name:ident),* => async move $body:block) => {
35        {
36            $(let $name = $name.clone();)*
37            move |_| {
38                $(let $name = $name.clone();)*
39                $crate::prelude::wasm_bindgen_futures::spawn_local(async move {
40                    $body
41                })
42            }
43        }
44    };
45}