Watchdog

Pretty simple but bulletproof watchdog actor.

Send reset signals on the mpsc sender at a fast enough rate, or else the expiration oneshot channel will trigger.

```rust use tokio::select; use simpletokiowatchdog::{Signal, Watchdog}; use std::time::Duration;

[tokio::main]

async fn main() { let watchdog = Watchdog::withtimeout(Duration::frommillis(100)); let (resettx, mut expiredrx) = watchdog.run();

let mut duration = Duration::from_millis(4);
loop {
    let sleep = tokio::time::sleep(duration);
    tokio::pin!(sleep);
    tokio::select! {
        _ = &mut expired_rx => {
            break;
        }
        () = sleep.as_mut() => {
            reset_tx.send(Signal::Reset).await.unwrap();
            duration *= 2;
            continue;
        }
    }
}
println!("{duration:?}");

} ```