pandet 0.1.0

A lightweight library to help act on failure of detached async tasks
Documentation
# pandet
A lightweight library that helps you detect failure of spawned async tasks without having to `.await` their handles.
Useful when you are spawning lots of detached tasks but want to fast-fail if a panic occurs.

```rust
use pandet::{PanicAlert, OnPanic};

let alert = PanicAlert::new();
let detector = alert.new_detector();

// Whichever async task spawner
task::spawn(
    async move {
        panic!();
    }
    .on_panic(&detector) // 👈
);

assert!(alert.await.is_err());
```

For `!Send` tasks, there is the `UnsendOnPanic` trait:
```rust
use pandet::{PanicAlert, UnsendOnPanic};

let alert = PanicAlert::new();
let detector = alert.new_detector();

task::spawn_local(
    async move {
        panic!();
    }
    .unsend_on_panic(&detector)
);
```

Refined control over how to handle panics can also be implemented with `PanicMonitor`
which works like a stream of alerts. You may also pass some information to the alert/monitor
when a panic occurs:
```rust
use futures::StreamExt;
use pandet::{PanicMonitor, OnPanic};

let mut monitor = PanicMonitor::new();
let detector = monitor.new_detector();

for i in 0..=10 {
    task::spawn(
        async move {
            if i == 10 {
                panic!();
            }
        }
        .on_panic_info(&detector, i)
    );
}

while let Some(res) = monitor.next().await {
    if res.is_err() {
        let id = res.unwrap_err().0;
        assert_eq!(id, 10);
        break;
    }
}
```