pub enum JobResult {
Success,
Failed,
RetryAt(chrono::DateTime<chrono::Utc>),
RescheduleAt(chrono::DateTime<chrono::Utc>),
HandlerMissing,
Critical,
Cancel,
Unprocessable,
InternalError,
}
impl JobResult {
pub(crate) fn handle(&self) -> JobResultInternal {
match self {
JobResult::Success => JobResultInternal::Completed,
JobResult::Failed => JobResultInternal::Pending,
JobResult::RetryAt(_) => JobResultInternal::Pending,
JobResult::RescheduleAt(_) => JobResultInternal::Pending,
JobResult::InternalError => JobResultInternal::Pending,
JobResult::HandlerMissing => JobResultInternal::Unprocessable,
JobResult::Unprocessable => JobResultInternal::Unprocessable,
JobResult::Critical => JobResultInternal::Critical,
JobResult::Cancel => JobResultInternal::Cancelled,
}
}
}
#[derive(Debug)]
pub(crate) enum JobResultInternal {
Pending,
Failed,
Completed,
Unprocessable,
Cancelled,
Critical,
Running,
BadJob,
}
impl std::fmt::Display for JobResultInternal {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
JobResultInternal::Pending => write!(f, "pending"),
JobResultInternal::Failed => write!(f, "failed"),
JobResultInternal::Completed => write!(f, "completed"),
JobResultInternal::Unprocessable => write!(f, "unprocessable"),
JobResultInternal::Cancelled => write!(f, "cancelled"),
JobResultInternal::Critical => write!(f, "critical_failure"),
JobResultInternal::Running => write!(f, "running"),
JobResultInternal::BadJob => write!(f, "bad_job"),
}
}
}
pub(crate) enum AnyJobResult {
Internal(JobResultInternal),
Public(JobResult),
}
impl From<JobResult> for AnyJobResult {
fn from(result: JobResult) -> Self {
Self::Public(result)
}
}
impl From<JobResultInternal> for AnyJobResult {
fn from(result: JobResultInternal) -> Self {
Self::Internal(result)
}
}