use std::{collections::VecDeque, fmt::Debug};
use crate::backend::future::BoxSyncFuture;
#[non_exhaustive]
pub enum State<Task, Error> {
NotBootstrapped,
Ready,
RegisterWorker(BoxSyncFuture<Result<(), Error>>),
HeartBeat(BoxSyncFuture<Result<(), Error>>),
ProcessEvents(BoxSyncFuture<Result<(), Error>>),
Fetch(BoxSyncFuture<Result<Vec<Task>, Error>>),
ReenqueueOrphaned(BoxSyncFuture<Result<u64, Error>>),
Buffered(VecDeque<Task>),
Dead,
}
impl<T, E> Debug for State<T, E> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::NotBootstrapped => write!(f, "NotBootstrapped"),
Self::Ready => write!(f, "Ready"),
Self::RegisterWorker(_) => write!(f, "RegisterWorker"),
Self::HeartBeat(_) => write!(f, "HeartBeat"),
Self::ProcessEvents(_) => write!(f, "ProcessEvents"),
Self::Fetch(_) => write!(f, "Fetch"),
Self::ReenqueueOrphaned(_) => write!(f, "ReenqueueOrphaned"),
Self::Buffered(buffer) => write!(f, "Buffered({} items)", buffer.len()),
Self::Dead => write!(f, "Dead"),
}
}
}