Skip to main content

apalis_core/backend/persistence/
state.rs

1use std::{collections::VecDeque, fmt::Debug};
2
3use crate::backend::future::BoxSyncFuture;
4
5/// Current lifecycle state of a `Persistence` loop.
6#[non_exhaustive]
7pub enum State<Task, Error> {
8    /// The persistence layer has not yet been initialized.
9    NotBootstrapped,
10
11    /// The persistence layer is initialized and ready to perform work.
12    Ready,
13
14    /// Registering the worker with the persistence backend.
15    RegisterWorker(BoxSyncFuture<Result<(), Error>>),
16
17    /// Sending a heartbeat to keep the worker alive.
18    HeartBeat(BoxSyncFuture<Result<(), Error>>),
19
20    /// Processing task lifecycle events.
21    ProcessEvents(BoxSyncFuture<Result<(), Error>>),
22
23    /// Fetching the next batch of tasks from the persistence backend.
24    Fetch(BoxSyncFuture<Result<Vec<Task>, Error>>),
25
26    /// Re-enqueuing tasks that were abandoned by another worker.
27    ReenqueueOrphaned(BoxSyncFuture<Result<u64, Error>>),
28
29    /// Tasks fetched from persistence and buffered for processing.
30    Buffered(VecDeque<Task>),
31
32    /// The persistence loop has stopped and will perform no further work.
33    Dead,
34}
35
36impl<T, E> Debug for State<T, E> {
37    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
38        match self {
39            Self::NotBootstrapped => write!(f, "NotBootstrapped"),
40            Self::Ready => write!(f, "Ready"),
41            Self::RegisterWorker(_) => write!(f, "RegisterWorker"),
42            Self::HeartBeat(_) => write!(f, "HeartBeat"),
43            Self::ProcessEvents(_) => write!(f, "ProcessEvents"),
44            Self::Fetch(_) => write!(f, "Fetch"),
45            Self::ReenqueueOrphaned(_) => write!(f, "ReenqueueOrphaned"),
46            Self::Buffered(buffer) => write!(f, "Buffered({} items)", buffer.len()),
47            Self::Dead => write!(f, "Dead"),
48        }
49    }
50}