ratflow 0.2.0

A minimalistic framework for building TUI applications using a reactive architecture.
Documentation
use std::time::Duration;
use sycamore_reactive::{create_signal, use_current_scope};
use tokio::time::sleep;

#[inline]
#[track_caller]
pub fn create_timeout(fun: impl FnOnce() + 'static, duration: Duration) {
    let trigger = create_signal(());
    let scope = use_current_scope();
    any_spawner::Executor::spawn_local(async move {
        sleep(duration).await;
        if trigger.is_alive() {
            scope.run_in(fun)
        }
    });
}

#[inline]
#[track_caller]
pub fn create_interval(mut fun: impl FnMut() + 'static, duration: Duration) {
    let trigger = create_signal(());
    let scope = use_current_scope();
    any_spawner::Executor::spawn_local(async move {
        loop {
            sleep(duration).await;
            if trigger.is_alive() {
                scope.run_in(&mut fun)
            } else {
                return;
            }
        }
    });
}