qrush_engine/utils/
general.rs1use 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}