use std::collections::HashMap; use serde::{Deserialize, Serialize}; use crate::{models::ScriptType, time::Timestamp}; #[derive(Clone, Serialize, Deserialize)] pub struct Job { /// Job Id, this is given by the actor who created the job pub id: u32, /// Actor ID which created this job pub caller_id: u32, /// Context in which the job is executed pub context_id: u32, pub script: String, pub script_type: ScriptType, /// Timeout in seconds for this job pub timeout: u32, /// Max amount of times to retry this job pub retries: u8, pub env_vars: HashMap, pub result: HashMap, pub prerequisites: Vec, /// Ids of jobs this job depends on, i.e. this job can't start until those have finished pub depends: Vec, pub created_at: Timestamp, pub updated_at: Timestamp, pub status: JobStatus, } #[derive(Clone, Serialize, Deserialize, PartialEq, Eq, Debug)] pub enum JobStatus { Dispatched, WaitingForPrerequisites, Started, Error, Finished, } impl Job { pub fn id(&self) -> u32 { self.id } pub fn caller_id(&self) -> u32 { self.caller_id } pub fn context_id(&self) -> u32 { self.context_id } pub fn depends(&self) -> &[u32] { &self.depends } pub fn prerequisites(&self) -> &[String] { &self.prerequisites } pub fn script_type(&self) -> ScriptType { self.script_type.clone() } pub fn status(&self) -> JobStatus { self.status.clone() } }