later 0.0.27

Distributed Background jobs manager and runner for Rust
Documentation
use crate::{JobId, RecurringJobId};
#[derive(Debug, Clone)]
/// Application wide identifier of some kind
pub(crate) struct Id(String);
impl Id {
    pub fn new(prefix: &str, id_str: &str) -> Self {
        Self(format!("{}-{}", prefix, id_str))
    }
}
impl std::fmt::Display for Id {
    fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        formatter.write_str(&self.0)
    }
}

pub(crate) enum IdOf {
    SavedJob(JobId),
    SavedRecurringJob(RecurringJobId),
    ContinuationOf(JobId),
    JobsInStagesId(String /* Stage name */),
    AllJobs,
    AllRecurringJobs,
    ConfigDateLastPolledForReqdJobs,
    ConfigDateLastPolledForDelayedJobs,
    ConfigDateLastPolledForRecurringJobs,
    ConfigDateLastPolledForExpiredStorage,
    ConfigDateLastPolledForStuckJobs,
}

impl IdOf {
    pub fn get_id(&self, prefix: &str) -> Id {
        let id_str = match self {
            IdOf::SavedJob(id) => format!("job-{}", id),
            IdOf::SavedRecurringJob(id) => format!("rec-job-{}", id),
            IdOf::ContinuationOf(id) => format!("job-{}-next", id),
            IdOf::JobsInStagesId(stage) => format!("stage-{}-jobs", stage),
            IdOf::AllJobs => "all-jobs".into(),
            IdOf::AllRecurringJobs => "all-recurring-jobs".into(),
            IdOf::ConfigDateLastPolledForReqdJobs => "date-polled-reqd-jobs".into(),
            IdOf::ConfigDateLastPolledForDelayedJobs => "date-polled-delayed-jobs".into(),
            IdOf::ConfigDateLastPolledForRecurringJobs => "date-polled-recurring-jobs".into(),
            IdOf::ConfigDateLastPolledForExpiredStorage => "date-polled-expired-storage".into(),
            IdOf::ConfigDateLastPolledForStuckJobs => "date-polled-stuck-jobs".into(),
        };

        Id::new(prefix, &id_str)
    }
}