use crate::cmd::Cmd;
use crate::hooks::use_cmd::use_cmd_once;
use std::time::Duration;
pub fn use_interval<F>(delay: Duration, callback: F)
where
F: Fn() + Send + Sync + Clone + 'static,
{
use_cmd_once(move |_| {
let cb = callback.clone();
Cmd::every(delay, move |_| {
cb();
})
});
}
pub fn use_interval_when<F>(delay: Duration, enabled: bool, callback: F)
where
F: Fn() + Send + Sync + Clone + 'static,
{
use_cmd_once(move |_| {
if enabled {
let cb = callback.clone();
Cmd::every(delay, move |_| {
cb();
})
} else {
Cmd::none()
}
});
}
pub fn use_timeout<F>(delay: Duration, callback: F)
where
F: FnOnce() + Send + 'static,
{
use_cmd_once(move |_| {
Cmd::sleep(delay).and_then(Cmd::perform(move || async move {
callback();
}))
});
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_use_interval_compiles() {
fn _test_interval() {
use_interval(Duration::from_secs(1), || {
println!("tick");
});
}
}
#[test]
fn test_use_interval_when_compiles() {
fn _test_interval_when() {
use_interval_when(Duration::from_secs(1), true, || {
println!("tick");
});
}
}
#[test]
fn test_use_timeout_compiles() {
fn _test_timeout() {
use_timeout(Duration::from_secs(1), || {
println!("done");
});
}
}
}