zng_app::handler

Macro async_app_hn_once

source
macro_rules! async_app_hn_once {
    ($($tt:tt)+) => { ... };
}
Expand description

Declare an async clone-move app event handler that is only called once.

The macro input is a closure with optional clone-move variables, internally it uses async_clmv_fn_once! so the input is the same syntax.

§Examples

The example captures data by move and then moves it again to another thread. This is not something you can do using async_app_hn! because that handler expects to be called many times. We want to handle CLICK_EVENT once in this example, so we can don’t need to capture by clone-move just to use data.

let data = vec![1, 2, 3];
on_open = async_hn_once!(|_| {
    task::run(async move {
         for i in data {
             print!("{i}, ");
         }    
    }).await;

    println!("Done!");
});

You can still clone-move to have access to the variable after creating the handler, in this case the data will be cloned into the handler but will just be moved to the other thread, avoiding a needless clone.

let data = vec![1, 2, 3];
on_open = async_hn_once!(data, |_| {
    task::run(async move {
         for i in data {
             print!("{i}, ");
         }    
    }).await;

    println!("Done!");
});
println!("{data:?}");