qrush_engine/utils/
general.rs

1use serde::{Serialize, de::DeserializeOwned};
2use crate::job::Job;
3use crate::registry::JOB_REGISTRY;
4
5
6pub trait JobMetadata: Serialize + DeserializeOwned {
7    fn queue() -> &'static str;
8    fn name() -> &'static str;
9    fn max_retries() -> usize {
10        0
11    }
12}
13
14
15
16
17pub async fn parse_dynamic_job(json_str: &str) -> Option<Box<dyn Job>> {
18    let val: serde_json::Value = serde_json::from_str(json_str).ok()?;
19    let job_type = val.get("type")?.as_str()?;
20
21    let registry = JOB_REGISTRY.lock().unwrap();
22    let handler = registry.get(job_type)?;
23
24    handler(json_str.to_string()).await.ok()
25}