use serde::de::DeserializeOwned;
use crate::payload;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum JobState {
Pending,
Processing,
Dead,
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub struct Job {
pub id: i64,
pub queue: String,
pub state: JobState,
pub payload: Vec<u8>,
pub priority: i64,
pub run_at: i64,
pub attempts: i64,
pub max_attempts: i64,
pub worker_id: Option<String>,
pub claimed_at: Option<i64>,
pub claim_expires_at: Option<i64>,
pub created_at: i64,
pub expires_at: Option<i64>,
pub visibility_timeout_s: i64,
pub backoff_base_s: i64,
pub dead_letter_retention_s: Option<i64>,
pub last_error: Option<String>,
pub died_at: Option<i64>,
}
impl Job {
#[doc(hidden)]
#[allow(clippy::too_many_arguments)]
pub fn from_row(
id: i64,
queue: String,
state: JobState,
payload: Vec<u8>,
priority: i64,
run_at: i64,
attempts: i64,
max_attempts: i64,
worker_id: Option<String>,
claimed_at: Option<i64>,
claim_expires_at: Option<i64>,
created_at: i64,
expires_at: Option<i64>,
visibility_timeout_s: i64,
backoff_base_s: i64,
dead_letter_retention_s: Option<i64>,
last_error: Option<String>,
died_at: Option<i64>,
) -> Self {
Self {
id,
queue,
state,
payload,
priority,
run_at,
attempts,
max_attempts,
worker_id,
claimed_at,
claim_expires_at,
created_at,
expires_at,
visibility_timeout_s,
backoff_base_s,
dead_letter_retention_s,
last_error,
died_at,
}
}
pub fn payload_as<T: DeserializeOwned>(&self) -> crate::Result<T> {
payload::payload_as(&self.payload)
}
}