task-supervisor 0.4.1

Supervisor for long-lived tokio tasks
Documentation
//! # task-supervisor
//!
//! [![Crates.io](https://img.shields.io/crates/v/supervisor.svg)](https://crates.io/crates/task-supervisor)
//! [![Docs.rs](https://docs.rs/supervisor/badge.svg)](https://docs.rs/task-supervisor)
//!
//! `task-supervisor` helps you keep Tokio tasks alive.
//! It watches each task, restarts it if it crashes or stops responding, and lets you add, restart, or kill tasks at runtime.
//!
//! ## Install
//!
//! ```bash
//! cargo add task-supervisor
//! ```
//!
//! ## Quick example
//!
//! ```rust,no_run
//! use task_supervisor::{SupervisorBuilder, SupervisedTask, TaskResult};
//!
//! #[derive(Clone)]
//! struct Printer;
//!
//! impl SupervisedTask for Printer {
//!     async fn run(&mut self) -> TaskResult {
//!         println!("hello");
//!         Ok(())
//!     }
//! }
//!
//! #[tokio::main]
//! async fn main() {
//!     let supervisor = SupervisorBuilder::default()
//!         .with_task("printer", Printer)
//!         .build()
//!         .run();
//!
//!     supervisor.wait().await.unwrap();   // wait until every task finishes or is killed
//! }
//! ```
//!
//! ## What you get
//!
//! * **Automatic restarts** – failed tasks are relaunched with exponential back-off.
//! * **Dynamic control** – add, restart, kill, or query tasks at runtime through a [`SupervisorHandle`].
//! * **Configurable** – health-check interval, restart limits, back-off, dead-task threshold.
//!
//! ## Usage
//!
//! Build a supervisor with [`SupervisorBuilder`], call [`.build()`](SupervisorBuilder::build)
//! to get a [`Supervisor`], then [`.run()`](Supervisor::run) to start it. This returns a
//! [`SupervisorHandle`] you use to control things at runtime:
//!
//! | Method                          | Description                                          |
//! | ------------------------------- | ---------------------------------------------------- |
//! | `wait().await`                  | Block until the supervisor exits                     |
//! | `add_task(name, task)`          | Register and start a new task                        |
//! | `restart(name)`                 | Force-restart a task                                 |
//! | `kill_task(name)`               | Stop a task permanently                              |
//! | `get_task_status(name).await`   | Get a task's [`TaskStatus`]                          |
//! | `get_all_task_statuses().await` | Get every task's status                              |
//! | `shutdown()`                    | Stop all tasks and exit                              |
//!
//! The handle auto-shuts down the supervisor when all clones are dropped.
//!
//! ## Clone and restart behaviour
//!
//! Every task must implement `Clone`. The supervisor stores the **original**
//! instance and clones it each time the task is started or restarted.
//! Mutations made through `&mut self` in [`SupervisedTask::run`] only affect
//! the running clone and are lost on restart.
//!
//! To share state across restarts, wrap it in an `Arc` (e.g. `Arc<AtomicUsize>`).
//! Plain owned fields will always start from their original value. See the
//! [`SupervisedTask`] docs for a full example.
//!
//! ## License
//!
//! [MIT](./LICENSE)

pub use supervisor::{
    builder::SupervisorBuilder,
    handle::{SupervisorHandle, SupervisorHandleError},
    Supervisor, SupervisorError,
};
pub use task::{SupervisedTask, TaskError, TaskResult, TaskStatus};

mod supervisor;
mod task;

pub type TaskName = String;