use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::time::Duration;
use task_supervisor::{SupervisedTask, TaskResult};
#[allow(unused)]
#[derive(Clone, Default)]
pub struct CompletingTask {
pub run_count: Arc<AtomicUsize>,
}
impl SupervisedTask for CompletingTask {
async fn run(&mut self) -> TaskResult {
self.run_count.fetch_add(1, Ordering::SeqCst);
tokio::time::sleep(Duration::from_millis(100)).await;
Ok(())
}
}
#[allow(unused)]
#[derive(Clone)]
pub struct FailingTask {
pub run_count: Arc<AtomicUsize>,
}
#[allow(clippy::useless_conversion)]
impl SupervisedTask for FailingTask {
async fn run(&mut self) -> TaskResult {
self.run_count.fetch_add(1, Ordering::SeqCst);
Err(anyhow::anyhow!("Task failed!").into())
}
}
#[allow(unused)]
#[derive(Clone)]
pub struct HealthyTask {
pub run_flag: Arc<std::sync::atomic::AtomicBool>,
}
impl SupervisedTask for HealthyTask {
async fn run(&mut self) -> TaskResult {
while self.run_flag.load(Ordering::SeqCst) {
tokio::time::sleep(Duration::from_millis(50)).await;
}
Ok(())
}
}
#[allow(unused)]
#[derive(Clone)]
pub struct ImmediateCompleteTask;
impl SupervisedTask for ImmediateCompleteTask {
async fn run(&mut self) -> TaskResult {
Ok(())
}
}
#[allow(unused)]
#[derive(Clone)]
pub struct ImmediateFailTask;
#[allow(clippy::useless_conversion)]
impl SupervisedTask for ImmediateFailTask {
async fn run(&mut self) -> TaskResult {
Err(anyhow::anyhow!("Immediate failure!").into())
}
}